欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

Qt工作笔记-Qt之自定义属性Q_PROPERTY

发布时间:2025/3/15 77 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Qt工作笔记-Qt之自定义属性Q_PROPERTY 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

 

QT提供了一个成熟的属性系统,但是作为一个跨平台的且与编译器无关的库,qt不依赖于非标准的编译器功能例如 __property or [property];
 

QT的强大之处在于它可以支持任何标准的c++编译器。 QT是基于 Meta-Object System(元对象)和signals and slots(信号槽)的。

 

Q_PROPERTY

 

Q_PROPERTY()是一个宏,用来在一个类中声明一个属性property,由于该宏是qt特有的,需要用moc进行编译,故必须继承于QObject类。

 

Q_PROPERTY(type name READ getFunction [WRITE setFunction] [RESET resetFunction] [NOTIFY notifySignal] [DESIGNABLE bool] [SCRIPTABLE bool] [STORED bool] [USER bool] [CONSTANT] [FINAL])

可能还不太好理解 不过下面介绍几个特殊的例子你就豁然开朗了。

 

 

  • Q_PROPERTY(bool focus READ hasFocus)

  • Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)

  • Q_PROPERTY(QString title READ title WRITE setTitle USER true)

  •  

     

    一个属性行为类似于类里面的数据成员,但是他是却可以通过Meta-Object System来访问。 在外界看来,property跟类中数据成员没有什么区别,但是还是有几点不一样,参考qt文档,主要有以下几点:

    1.必须有一个read函数。它用来读取属性值。因此用Const限定。它的返回值类型必须为属性类型或者属性类型的引用或者指针。不能是其他类型例如:QWidget::hasFocus().

    2.有一个可选的write函数。它用来设置属性值,它的返回值必须为void型,而起必须要含有一个参数。例如:QWidget::setEnabled()

    3.一个reset函数能够把property设置成其默认状态,它也是可选的。复位功能必须返回void,并且不带参数,

    4.一个NOTIFY信号是可选的 。如果定义,它提供了一个信号这个信号在值发生改变时会自动被触发。

    5.如果定义了"STODE"属性表明这是一直存在的。QWidget::minimumSize() 6.一个"DESIGNABLE"属性表明该property能在GUI builder(一般为Qt Designer)可见

    7.USER 属性 表面是否可以被用户所编辑

    8 CONST设定属性是不可修改的 所以不能跟WRITE或者NOTIFY同时出现

    9 FINAL表明该属性不会被派生类中重写
     

     

    然后对照这些,自己写了一个例子:

    class Test : public QObject {Q_OBJECTQ_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)public:Test(QObject *parent = 0) : QObject(parent) {}virtual ~Test(){}void setEnabled(bool e) { enabled = e; }bool isEnabled() const { return enabled; }private:bool enabled;};

    然后在主函数中添加:

    Test *test = new Test;test->setProperty("enabled", true);//test->setEnabled(true); //ok also workif(test->property("enabled").toBool()) .....

     

    如果你不用QML,不用QtScript,不用于创建Designer插件,不使用QItemDelegate,不使用ActiveQt,不使用...... 的话,那么Q_PROPERTY确实没用。

    总结

    以上是生活随笔为你收集整理的Qt工作笔记-Qt之自定义属性Q_PROPERTY的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。