1.简介
属性表是vs2003时引入的的新控件,用于流量和设置大量的信息,现在,很多软件上都能看到它的身影,如vs,Qt Creator等IDE的详细设置里都离不开属性表。


2.安装部署

想用动态链接库的,只需要自己新建一个config.pri文件,里面写上SOLUTIONS_LIBRARY = yes即可。建议大家使用动态库,避免一些moc文件生成的一些诡异问题~~
部署QtTreePropertyBrowser非常简单,只需要把解压的文件夹放在你的工程目录下,在pro文件里加入
include($$PWD/[qtpropertybrowser文件夹]/src/qtpropertybrowser.pri)




3.属性表的使用简介
3.1添加内容
-
QtBoolPropertyManager
-
QtColorPropertyManager
-
QtDatePropertyManager
-
QtDateTimePropertyManager
-
QtDoublePropertyManager
-
QtEnumPropertyManager
-
QtFlagPropertyManager
-
QtFontPropertyManager
-
QtGroupPropertyManager
-
QtIntPropertyManager
-
QtPointPropertyManager
-
QtRectPropertyManager
-
QtSizePropertyManager
-
QtSizePolicyPropertyManager
-
QtStringPropertyManager
-
QtTimePropertyManager
-
QtVariantPropertyManager
QtVariantPropertyManager*m_pVarManager;
cpp:
1 m_pVarManager =newQtVariantPropertyManager(ui->propertyTree); 2 QtVariantProperty *item =m_pVarManager->addProperty(QVariant::Int, QStringLiteral("整形数据:")); 3 item->setValue(101); 4 ui->propertyTree->addProperty(item); 5 item =m_pVarManager->addProperty(QVariant::Bool, QStringLiteral("布尔型数据:")); 6 item->setValue(true); 7 ui->propertyTree->addProperty(item); 8 item =m_pVarManager->addProperty(QVariant::Double, QStringLiteral("浮点数据:")); 9 item->setValue(3.1415926); 10 ui->propertyTree->addProperty(item); 11 item =m_pVarManager->addProperty(QVariant::String, QStringLiteral("字符串数据:")); 12 ui->propertyTree->addProperty(item); 13 item->setValue(QStringLiteral("尘中远"));

1 m_pVarManager =newQtVariantPropertyManager(ui->propertyTree); 2 QtProperty *groupItem =m_pVarManager->addProperty(QtVariantPropertyManager::groupTypeId(),QStringLiteral("组1")); 3 QtVariantProperty *item =m_pVarManager->addProperty(QVariant::Int, QStringLiteral("整形数据:")); 4 item->setValue(101); 5 groupItem->addSubProperty(item); 6 item =m_pVarManager->addProperty(QVariant::Bool, QStringLiteral("布尔型数据:")); 7 item->setValue(true); 8 groupItem->addSubProperty(item); 9 item =m_pVarManager->addProperty(QVariant::Double, QStringLiteral("浮点数据:")); 10 item->setValue(3.1415926); 11 groupItem->addSubProperty(item); 12 item =m_pVarManager->addProperty(QVariant::String, QStringLiteral("字符串数据:")); 13 groupItem->addSubProperty(item); 14 item->setValue(QStringLiteral("尘中远")); 15 ui->propertyTree->addProperty(groupItem);

1 QtVariantPropertyManager*m_pVarManager; 2 QtVariantEditorFactory*m_pVarFactory;
cpp
1 m_pVarManager =newQtVariantPropertyManager(ui->propertyTree); 2 m_pVarFactory =newQtVariantEditorFactory(ui->propertyTree); 3 QtProperty *groupItem =m_pVarManager->addProperty(QtVariantPropertyManager::groupTypeId(),QStringLiteral("组1")); 4 QtVariantProperty *item =m_pVarManager->addProperty(QVariant::Int, QStringLiteral("整形数据:")); 5 item->setValue(101); 6 groupItem->addSubProperty(item); 7 item =m_pVarManager->addProperty(QVariant::Bool, QStringLiteral("布尔型数据:")); 8 item->setValue(true); 9 groupItem->addSubProperty(item); 10 item =m_pVarManager->addProperty(QVariant::Double, QStringLiteral("浮点数据:")); 11 item->setValue(3.1415926); 12 groupItem->addSubProperty(item); 13 item =m_pVarManager->addProperty(QVariant::String, QStringLiteral("字符串数据:")); 14 groupItem->addSubProperty(item); 15 item->setValue(QStringLiteral("尘中远")); 16 ui->propertyTree->addProperty(groupItem); 17 ui->propertyTree->setFactoryForManager(m_pVarManager,m_pVarFactory);

void QtAbstractPropertyManager::propertyChanged ( QtProperty * property );
如果是用QtVariantPropertyManager,那么它的valueChanged 信号将会是你经常使用的信号,它会发生发生更改的属性指针以及更改后的值。
void valueChanged ( QtProperty * property, const QVariant & value )
但为了知道是哪个属性,需要附加一个map来进行记录,
h文件
1 QMap<QtProperty*,QString>m_property_dic; 2 QtVariantPropertyManager*m_pVarManager; 3 QtVariantEditorFactory*m_pVarFactory;
cpp
1 XXXClass::XXXClass(QWidget *parent) 2 :QMainWindow(parent),ui(newUi::XXXClass) { 3 m_pVarManager =newQtVariantPropertyManager(ui->propertyTree); 4 m_pVarFactory =newQtVariantEditorFactory(ui->propertyTree); 5 connect(m_pVarManager,&QtVariantPropertyManager::valueChanged,this,&XXXClass::variantPropertyValueChanged); 6 ui->propertyTree->setFactoryForManager(m_pVarManager,m_pVarFactory); 7 QtVariantProperty *item =m_pVarManager->addProperty(QVariant::Int, QStringLiteral("参数1")); 8 item->setValue(1); 9 ui->propertyTree->addProperty(item); 10 m_property_dic[item] =QStringLiteral("参数1"); 11 item =m_pVarManager->addProperty(QVariant::Double, QStringLiteral("参数2")); 12 item->setValue(2); 13 ui->propertyTree->addProperty(item); 14 m_property_dic[item] =QStringLiteral("参数2"); 15 item =m_pVarManager->addProperty(QVariant::String, QStringLiteral("参数3")); 16 item->setValue(QStringLiteral("czy")); 17 ui->propertyTree->addProperty(item); 18 m_property_dic[item] =QStringLiteral("参数3"); 19 item =m_pVarManager->addProperty(QVariant::Bool, QStringLiteral("参数4")); 20 item->setValue(true); 21 ui->propertyTree->addProperty(item); 22 m_property_dic[item] =QStringLiteral("参数4"); 23 } 24
25 voidXXXClass::variantPropertyValueChanged(QtProperty *property, constQVariant &value) 26 { 27 QString s =m_property_dic[property]; 28 qDebug()<<s<<":"<<value; 29 }
输出:
"" : QVariant(int, 1)
"" : QVariant(double, 2)
"" : QVariant(QString, "czy")
"" : QVariant(bool, true)
"参数1" : QVariant(int, 123)
"参数2" : QVariant(double, 13)
"参数3" : QVariant(QString, "")
"参数3" : QVariant(QString, "中国")
"参数4" : QVariant(bool, false)
"参数4" : QVariant(bool, true)
参考提供的例子,有时候,为了方便双向控制,还会建立一个映射
QMap<QtProperty *, QString> propertyToId;
QMap<QString, QtProperty *> idToProperty;