欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

Qt文档阅读笔记-Q_PROPERTY解析及实例

发布时间:2025/3/15 48 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Qt文档阅读笔记-Q_PROPERTY解析及实例 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

目录

官方解析

博主栗子


官方解析

这个宏用于继承于QObject的类声明属性。这样声明后的属性行为与类数据成员一样,但是他们可以通过元对象系统进行访问。

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

这个属性需要属性名,以为返回值类型,以及READ函数。返回值类型只要是QVariant支持的都阔以(这里要特别注意Q_DECLARE_METATYPE声明的类型也是可以用的),还有几个属性是可选的,但是写一个WRITE函数是很常见的。其他的属性处理USER是false外其他都为true。

Q_PROPERTY(QString title READ title WRITE setTitle USER true)

关于这个宏的更读信息,以及这个宏的详细使用要看Qt's Property System这篇文档。

 

博主栗子

运行截图如下:

myclass.h

#ifndef MYCLASS_H #define MYCLASS_H#include <QObject>class MyClass : public QObject {Q_OBJECTQ_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY priorityChanged) public:explicit MyClass(QObject *parent = 0);enum Priority{One,Two,Three};Q_ENUM(Priority)void setPriority(Priority priority);Priority priority()const;public slots:void prioritySLOT(Priority priority);signals:void priorityChanged(Priority);private:Priority m_priority;};#endif // MYCLASS_H

main.cpp

#include "myclass.h" #include <QApplication> #include <QMetaObject> #include <QMetaProperty> #include <QDebug> #include <QVariant>int main(int argc, char *argv[]) {QApplication a(argc, argv);MyClass *myinstance=new MyClass;QObject *object=myinstance;object->setProperty("priority","Two");//myinstance->setPriority(MyClass::Two); Method 2//change valuemyinstance->setPriority(MyClass::Three);const QMetaObject *metaobject=object->metaObject();for(int i=0;i<metaobject->propertyCount();i++){QMetaProperty metaproperty=metaobject->property(i);qDebug()<<object->property(metaproperty.name());}return a.exec(); }

myclass.cpp

#include "myclass.h" #include <QDebug>MyClass::MyClass(QObject *parent) : QObject(parent) {connect(this,SIGNAL(priorityChanged(Priority)),this,SLOT(prioritySLOT(Priority))); }void MyClass::setPriority(Priority priority) {m_priority=priority;emit priorityChanged(priority); }MyClass::Priority MyClass::priority() const {return m_priority; }void MyClass::prioritySLOT(MyClass::Priority priority) {qDebug()<<"prioritySLOT called! The priority value is "<<priority; }

运行截图如下:

当去掉

Q_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY priorityChanged)

后运行截图如下:

这里可以看到元对象属性里面没有他了,

关于为什么一开始就会有个QString,类型的属性,并且名字为objectname,将会在另外一篇博文中给出

总结

以上是生活随笔为你收集整理的Qt文档阅读笔记-Q_PROPERTY解析及实例的全部内容,希望文章能够帮你解决所遇到的问题。

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