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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值