Qt - 属性窗口编辑器
实现属性窗口编辑器
pro文件中添加
include($$[QT_INSTALL_PREFIX]/../Src/qttools/src/shared/qtpropertybrowser/qtpropertybrowser.pri)
定义:
#include "qtvariantproperty.h"
#include "qttreepropertybrowser.h"
// 创建
private slots:
void variantPropertyValueChanged(QtProperty *property, const QVariant &value);
private:
QtTreePropertyBrowser *m_propertyTree;
QtVariantPropertyManager* m_pVarManager;
QtVariantEditorFactory* m_pVarFactory;
// 记录属性和对应名称
QMap<QtProperty*,QString>m_property_dic;
使用:
// 属性树控件
m_propertyTree = new QtTreePropertyBrowser(this);
m_propertyTree->setGeometry(0,0,500,250);
m_propertyTree->setResizeMode(QtTreePropertyBrowser::Interactive);
m_propertyTree->setSplitterPosition(100);
// 属性管理
m_pVarManager = new QtVariantPropertyManager(m_propertyTree);
// 属性编辑
m_pVarFactory = new QtVariantEditorFactory(m_propertyTree);
// 分组
QtProperty *groupItem = m_pVarManager->addProperty(QtVariantPropertyManager::groupTypeId(), QString::fromLocal8Bit("组1"));
// 创建属性 设置类型 显示名称
QtVariantProperty *item = m_pVarManager->addProperty(QVariant::Int, QString::fromLocal8Bit("int"));
item->setValue(101);
groupItem->addSubProperty(item); // 插入组
m_property_dic[item] = QStringLiteral("参数1"); // 记录
item =m_pVarManager->addProperty(QVariant::Bool, QString::fromLocal8Bit("bool"));
item->setValue(true);
groupItem->addSubProperty(item);
m_property_dic[item] = QStringLiteral("参数2");
item =m_pVarManager->addProperty(QVariant::Double, QString::fromLocal8Bit("double"));
item->setValue(3.1415926);
item->setAttribute(QLatin1String("decimals"), 5);
groupItem->addSubProperty(item);
m_property_dic[item] = QStringLiteral("参数3");
item =m_pVarManager->addProperty(QVariant::String, QString::fromLocal8Bit("string"));
groupItem->addSubProperty(item);
m_property_dic[item] = QStringLiteral("参数4");
item->setValue(("4"));
item =m_pVarManager->addProperty(QVariant::Color, QString::fromLocal8Bit("Color"));
groupItem->addSubProperty(item);
m_property_dic[item] = QStringLiteral("参数5");
item->setValue(QColor(255,12,12,10));
m_propertyTree->addProperty(groupItem); // 插入控件
m_propertyTree->setFactoryForManager(m_pVarManager, m_pVarFactory); // 设置管理和编辑
connect(m_pVarManager, &QtVariantPropertyManager::valueChanged, this, &Widget::variantPropertyValueChanged);
编辑属性响应槽函数:
void Widget::variantPropertyValueChanged(QtProperty *property, const QVariant &value)
{
QString name = m_property_dic[property];
QtVariantProperty *p = (QtVariantProperty*)property;
qDebug()<<name<<":"<<value << value.typeName();
}
程序截图:
