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();
}

程序截图:
在这里插入图片描述