1、pro文件中添加
include($$[QT_INSTALL_PREFIX]/../Src/qttools/src/shared/qtpropertybrowser/qtpropertybrowser.pri)
2、ui中添加widget,提升為QtTreePropertyBrowser
3、.h中
#include <qtpropertybrowser.h>
#include <qtpropertymanager.h>
#include <qtvariantproperty.h>
enum PropertyType{BOOL_TYPE, STRING_TYPE, INT_TYPE, DOUBLE_TYPE, ENUM_TYPE};
void AddProperty(PropertyType type, QString propertyName, bool bEditFlag, QString params);
QtVariantPropertyManager *m_pVarMgrEdit;
QtVariantPropertyManager *m_pVarMgrOnlyRead;
QtVariantEditorFactory *m_pVarFactory;
QtVariantProperty *m_groupItem;
QtVariantProperty *m_item;
QMap<QtProperty*,QString> m_property_dic;
4、cpp
void MainWindow::InitAttribute()
{
m_pVarMgrEdit = new QtVariantPropertyManager(ui->propertyTree);//關聯factory,屬性可以修改
m_pVarMgrOnlyRead = new QtVariantPropertyManager(ui->propertyTree);//這個管理器不關聯factory,屬性不可修改
m_pVarFactory = new QtVariantEditorFactory(ui->propertyTree);
connect(m_pVarMgrEdit,&QtVariantPropertyManager::valueChanged,this, &MainWindow::onValueChanged);//綁定信號槽,當值改變的時候會發送信號
//----------------星歷/歷書----------------
m_groupItem = m_pVarMgrEdit->addProperty(QtVariantPropertyManager::groupTypeId(),QStringLiteral("星歷/歷書"));//添加組
AddProperty(ENUM_TYPE, QStringLiteral("選項"), true, QStringLiteral("使用內置星歷;導入歷書文件"));
AddProperty(STRING_TYPE, QStringLiteral("可用時間_始(UTC+00:00)"), false, QStringLiteral("2014/07/29 02:30:00"));
AddProperty(STRING_TYPE, QStringLiteral("可用時間_末(UTC+00:00)"), false, QStringLiteral("2014/07/29 04:30:00"));
/*item = m_pVarMgrEdit->addProperty(QVariant::Int, QStringLiteral("Int: "));
item = m_pVarMgrEdit->addProperty(QtVariantPropertyManager::enumTypeId(), QStringLiteral("選項"));
QStringList enumNames;
enumNames << "使用內置星歷" << "導入歷書文件";
item ->setAttribute(QLatin1String("enumNames"), enumNames);
item ->setValue(0);
m_groupItem->addSubProperty(item );
*/
ui->propertyTree->addProperty(m_groupItem);
//----------------時間設置------------------
m_groupItem = m_pVarMgrEdit->addProperty(QtVariantPropertyManager::groupTypeId(),QStringLiteral("時間設置"));//添加組
AddProperty(STRING_TYPE, QStringLiteral("起始時間(UTC+00:00)"), false, QStringLiteral("2014/07/29 02:30:00"));
AddProperty(STRING_TYPE, QStringLiteral("仿真時長"), true, QStringLiteral("60.00分鍾"));
ui->propertyTree->addProperty(m_groupItem);
ui->propertyTree->setFactoryForManager(m_pVarMgrEdit,m_pVarFactory);
//將一個工廠與manger關聯起來,即可修改內容。
}
void MainWindow::AddProperty(PropertyType type, QString propertyName, bool bEditFlag, QString params)
{
switch (type)
{
case BOOL_TYPE:
{
QVariant tempValue = params;
if(bEditFlag)
{
m_item = m_pVarMgrEdit->addProperty(QVariant::Bool,propertyName);
m_item->setValue(tempValue.toBool());
m_groupItem->addSubProperty(m_item);
}
else
{
m_item = m_pVarMgrOnlyRead->addProperty(QVariant::Bool,propertyName);
m_item->setValue(tempValue.toBool());
m_groupItem->addSubProperty(m_item);
}
break;
}
case DOUBLE_TYPE:
{
if(bEditFlag)
{
m_item = m_pVarMgrEdit->addProperty(QVariant::Double,propertyName);
m_item->setValue(params.toDouble());
m_groupItem->addSubProperty(m_item);
}
else
{
m_item = m_pVarMgrOnlyRead->addProperty(QVariant::Double,propertyName);
m_item->setValue(params.toDouble());
m_groupItem->addSubProperty(m_item);
}
break;
}
case STRING_TYPE:
{
if(bEditFlag)
{
m_item = m_pVarMgrEdit->addProperty(QVariant::String,propertyName);
m_item->setValue(params);
m_groupItem->addSubProperty(m_item);
}
else
{
m_item = m_pVarMgrOnlyRead->addProperty(QVariant::String,propertyName);
m_item->setValue(params);
m_groupItem->addSubProperty(m_item);
}
break;
}
case INT_TYPE:
{
if(bEditFlag)
{
m_item = m_pVarMgrEdit->addProperty(QVariant::Int,propertyName);
m_item->setValue(params.toInt());
m_groupItem->addSubProperty(m_item);
}
else
{
m_item = m_pVarMgrOnlyRead->addProperty(QVariant::Int,propertyName);
m_item->setValue(params.toInt());
m_groupItem->addSubProperty(m_item);
}
break;
}
case ENUM_TYPE:
{
m_item = m_pVarMgrEdit->addProperty(QtVariantPropertyManager::enumTypeId(), propertyName);
QStringList enumNames = params.split(";");
//enumNames << "給定速度加速度" << "圓形軌道" << "彈道軌跡" << "實時仿真數據" << "讀取軌跡文件";
m_item ->setAttribute(QLatin1String("enumNames"), enumNames);
m_item ->setValue(0);
m_groupItem->addSubProperty(m_item );
break;
}
default:
break;
}
}
void MainWindow::onValueChanged(QtProperty *property, const QVariant &value)
{
QString s =m_property_dic[property];
qDebug()<<s<<":"<<value;
}

