Qt中Q_PROPERTY的意义是什么?

25

我不理解Q_PROPERTY的用法。Q_PROPERTY如何帮助程序变得更加健壮?它通常用于什么场合?我浏览了论坛,但仍然不理解它的应用。我明白例子,但不知道如何使用。

这是一个例子,通过它我能获得什么好处?我知道read可以赋予读取权限。

write属性将只授予写权限。但是,为什么需要它?有人能举个例子吗?

 class MyClass : public QObject
 {
     Q_OBJECT
     Q_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY priorityChanged)
     Q_ENUMS(Priority)

 public:
     MyClass(QObject *parent = 0);
     ~MyClass();

     enum Priority { High, Low, VeryHigh, VeryLow };

     void setPriority(Priority priority)
     {
         m_priority = priority;
         emit priorityChanged(priority);
     }
     Priority priority() const
     { return m_priority; }

 signals:
     void priorityChanged(Priority);

 private:
     Priority m_priority;
 };
1个回答

15

它有以下优点:

  • 它可用于元对象系统,因此可以自省、从QML等中使用。

  • 它除了读写之外还有更多选项。查看notify、reset等。将它们集成到QtCreator(设计器)中也更容易。

  • 自Qt 5.1以后,在普通的读写情况下,您不需要编写样板代码,因为它们将为您生成。


3
+1表示支持“在普通读写情况下不需要使用Qt 5的样板代码”,我之前不知道这一点。但你有没有相关文档链接可以提供呢?(例如在此处未能找到任何内容:http://qt-project.org/doc/qt-5.0/qtcore/properties.html) - hyde
@hyde:不是的,我只是那时在IRC上听到了这个消息。查一下消息源吧。;-) - László Papp
1
有趣,好知道!文档:http://qt-project.org/doc/qt-5/properties.html - Frank Osterfeld
1
@hyde,不是的,正如上述错误报告所述,它是在5.1中引入的。请也阅读一下那个报告。这里是相应的Gerrit链接:https://codereview.qt-project.org/#change,44645 - László Papp
1
顺便说一下,在通过CSS样式化自定义小部件时,你可以编写类似于MyWidget#id[myproperty='value'] { border: 1px solid red; }的内容,这非常有用。 - MasterAler
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接