QT 屬性編輯控件 qtpropertybrowser 的用法


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM