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;