Qt QtPropertyBrowser 屬性瀏覽器控件(1)

        Qt 屬性控件,Qt5 安裝時勾選源碼安裝,源碼路徑裏面就有源碼QtPropertyBrowser ,參考這篇博客https://blog.csdn.net/czyt1988/article/details/78140050 只要在項目的pro 加入qtpropertybrowser如下路徑即可使用:

include($$[QT_INSTALL_PREFIX]/../Src/qttools/src/shared/qtpropertybrowser/qtpropertybrowser.pri)

          Qt4 qtpropertybrowser的下載地址爲:https://github.com/qtproject/qt-solutions/tree/master/qtpropertybrowser 

裏面有很多實例代碼,稍微修改一下就可以Qt5 上運行,可以參考學習。

         這篇博客主要是初步學習將Qt 的自有控件屬性展示到屬性控件中,後續在嘗試結合自定義插件控件進一步學習。

         如何獲取控件的屬性以及當前的控件屬性,QMetaObject 元對象已經提供了對應的接口,如下即可以獲取當前類的屬性:

    const QMetaObject *metaobject = ui->spinBox->metaObject();

    int count = metaobject->propertyCount(); //獲取元對象的所有屬性
    int index = metaobject->propertyOffset();//獲取當前控件的第一個屬性index

    for (int i = index; i < count; ++i) {

        QMetaProperty metaproperty = metaobject->property(i);

        const char *name = metaproperty.name();
        QVariant value = ui->spinBox->property(name);

        qDebug() << name << value;
    }

    參考 Qt4 qtpropertybrowser 裏面的object_controller 實例就很簡單了,想要的別人已經實現好了,ObjectController 類繼承於QWidget,將QWidget 提升爲ObjectController 爲QWidget,調用setObeject 接口即可加載控件的屬性。

ui->objectController->setObject(ui->spinBox)

       測試後發現加載了所有的屬性,即包括父類屬性,跟蹤接口 setObject ==》》addClassProperties ,addClassProperties 遞歸加載所有超類的屬性,去掉遞歸既可以實現只加載當前控件的屬性。

void ObjectControllerPrivate::addClassProperties(const QMetaObject *metaObject)
{
    if (!metaObject)
        return;
    //去掉遞歸,防止加載父類屬性,metaObject->superClass() 返回元對象的超類
    //addClassProperties(metaObject->superClass());

    QtProperty *classProperty = m_classToProperty.value(metaObject);
    if (!classProperty) {

最終實現效果如下:

測試代碼下載地址:https://download.csdn.net/download/wang112031/12296877

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章