屬性表是vs2003時引入的的新控件,用於流量和設置大量的信息,現在,很多軟件上都能看到它的身影,如vs,Qt Creator等IDE的詳細設置里都離不開屬性表。


2.安裝部署

想用動態鏈接庫的,只需要自己新建一個config.pri文件,里面寫上SOLUTIONS_LIBRARY = yes即可。建議大家使用動態庫,避免一些moc文件生成的一些詭異問題~~
部署QtTreePropertyBrowser非常簡單,只需要把解壓的文件夾放在你的工程目錄下,在pro文件里加入




3.屬性表的使用簡介
3.1添加內容
-
QtBoolPropertyManager
-
QtColorPropertyManager
-
QtDatePropertyManager
-
QtDateTimePropertyManager
-
QtDoublePropertyManager
-
QtEnumPropertyManager
-
QtFlagPropertyManager
-
QtFontPropertyManager
-
QtGroupPropertyManager
-
QtIntPropertyManager
-
QtPointPropertyManager
-
QtRectPropertyManager
-
QtSizePropertyManager
-
QtSizePolicyPropertyManager
-
QtStringPropertyManager
-
QtTimePropertyManager
-
QtVariantPropertyManager
- QtVariantPropertyManager*m_pVarManager;
- m_pVarManager =newQtVariantPropertyManager(ui->propertyTree);
- QtVariantProperty *item =m_pVarManager->addProperty(QVariant::Int, QStringLiteral("整形數據:"));
- item->setValue(101);
- ui->propertyTree->addProperty(item);
- item =m_pVarManager->addProperty(QVariant::Bool, QStringLiteral("布爾型數據:"));
- item->setValue(true);
- ui->propertyTree->addProperty(item);
- item =m_pVarManager->addProperty(QVariant::Double, QStringLiteral("浮點數據:"));
- item->setValue(3.1415926);
- ui->propertyTree->addProperty(item);
- item =m_pVarManager->addProperty(QVariant::String, QStringLiteral("字符串數據:"));
- ui->propertyTree->addProperty(item);
- item->setValue(QStringLiteral("塵中遠"));
效果如下:

- m_pVarManager =newQtVariantPropertyManager(ui->propertyTree);
- QtProperty *groupItem =m_pVarManager->addProperty(QtVariantPropertyManager::groupTypeId(),QStringLiteral("組1"));
- QtVariantProperty *item =m_pVarManager->addProperty(QVariant::Int, QStringLiteral("整形數據:"));
- item->setValue(101);
- groupItem->addSubProperty(item);
- item =m_pVarManager->addProperty(QVariant::Bool, QStringLiteral("布爾型數據:"));
- item->setValue(true);
- groupItem->addSubProperty(item);
- item =m_pVarManager->addProperty(QVariant::Double, QStringLiteral("浮點數據:"));
- item->setValue(3.1415926);
- groupItem->addSubProperty(item);
- item =m_pVarManager->addProperty(QVariant::String, QStringLiteral("字符串數據:"));
- groupItem->addSubProperty(item);
- item->setValue(QStringLiteral("塵中遠"));
- ui->propertyTree->addProperty(groupItem);

- QtVariantPropertyManager*m_pVarManager;
- QtVariantEditorFactory*m_pVarFactory;
cpp
- m_pVarManager =newQtVariantPropertyManager(ui->propertyTree);
- m_pVarFactory =newQtVariantEditorFactory(ui->propertyTree);
- QtProperty *groupItem =m_pVarManager->addProperty(QtVariantPropertyManager::groupTypeId(),QStringLiteral("組1"));
- QtVariantProperty *item =m_pVarManager->addProperty(QVariant::Int, QStringLiteral("整形數據:"));
- item->setValue(101);
- groupItem->addSubProperty(item);
- item =m_pVarManager->addProperty(QVariant::Bool, QStringLiteral("布爾型數據:"));
- item->setValue(true);
- groupItem->addSubProperty(item);
- item =m_pVarManager->addProperty(QVariant::Double, QStringLiteral("浮點數據:"));
- item->setValue(3.1415926);
- groupItem->addSubProperty(item);
- item =m_pVarManager->addProperty(QVariant::String, QStringLiteral("字符串數據:"));
- groupItem->addSubProperty(item);
- item->setValue(QStringLiteral("塵中遠"));
- ui->propertyTree->addProperty(groupItem);
- ui->propertyTree->setFactoryForManager(m_pVarManager,m_pVarFactory);

void QtAbstractPropertyManager::propertyChanged ( QtProperty * property );
如果是用QtVariantPropertyManager,那么它的valueChanged 信號將會是你經常使用的信號,它會發生發生更改的屬性指針以及更改后的值。
void valueChanged ( QtProperty * property, const QVariant & value )
但為了知道是哪個屬性,需要附加一個map來進行記錄,
h文件
- QMap<QtProperty*,QString>m_property_dic;
- QtVariantPropertyManager*m_pVarManager;
- QtVariantEditorFactory*m_pVarFactory;
cpp
- XXXClass::XXXClass(QWidget *parent)
- :QMainWindow(parent),ui(newUi::XXXClass) {
- m_pVarManager =newQtVariantPropertyManager(ui->propertyTree);
- m_pVarFactory =newQtVariantEditorFactory(ui->propertyTree);
- connect(m_pVarManager,&QtVariantPropertyManager::valueChanged,this,&XXXClass::variantPropertyValueChanged);
- ui->propertyTree->setFactoryForManager(m_pVarManager,m_pVarFactory);
- QtVariantProperty *item =m_pVarManager->addProperty(QVariant::Int, QStringLiteral("參數1"));
- item->setValue(1);
- ui->propertyTree->addProperty(item);
- m_property_dic[item] =QStringLiteral("參數1");
- item =m_pVarManager->addProperty(QVariant::Double, QStringLiteral("參數2"));
- item->setValue(2);
- ui->propertyTree->addProperty(item);
- m_property_dic[item] =QStringLiteral("參數2");
- item =m_pVarManager->addProperty(QVariant::String, QStringLiteral("參數3"));
- item->setValue(QStringLiteral("czy"));
- ui->propertyTree->addProperty(item);
- m_property_dic[item] =QStringLiteral("參數3");
- item =m_pVarManager->addProperty(QVariant::Bool, QStringLiteral("參數4"));
- item->setValue(true);
- ui->propertyTree->addProperty(item);
- m_property_dic[item] =QStringLiteral("參數4");
- }
- voidXXXClass::variantPropertyValueChanged(QtProperty *property, constQVariant &value)
- {
- QString s =m_property_dic[property];
- qDebug()<<s<<":"<<value;
- }
輸出:
"" : 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;