目录

官方解析

博主栗子


官方解析

这个宏用于继承于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解析及实例相关推荐

  1. Qt文档阅读笔记-QQmlApplicationEngine解析与实例(qml与C++混合编程及QQuick与widgets混合)

    目录 官方解析 博主例子 官方解析 QQmlApplicationEngine提供了从一个QML文件里面加载应用程序的方式. 这类联合了QQmlEngine和QmlComponent去加载单独的QML ...

  2. Qt文档阅读笔记-QScopedPointer解析及实例

    当指针超出范围后就会删除被引用的对象. 与QPointer不同,他可以在任意类型中使用(QPointer只能在identity type中使用) 4个不同的清除类         1. QScoped ...

  3. Qt文档阅读笔记-Fortune Client Example实例解析

    目录 官方解析 实例代码 博主增加解析 官方解析 Fortune Client Example 以使用QTcpSocket为例子,服务端可以配合Fortune Server或Threaded Fort ...

  4. Qt文档阅读笔记-Multiple Inheritance Example 实例解析及Automatic Connections解析

    目录 Multiple Inheritance Example 实例解析 Automatic Connections解析 Multiple Inheritance Example 实例解析 这个实例很 ...

  5. Qt文档阅读笔记-QIODevice解析及Audio Example实例解析

    目录 QIODevice官方解释及个人分析 Audio Example官方实例解析 QIODevice官方解释及个人分析 QIODevice类是Qt中I/O设备的接口. 提供了读和写的接口,QIODe ...

  6. Qt文档阅读笔记-Transformations解析及例子

    目录 官方解析 博主小栗子 官方解析 QGraphicsItem除了基于他的坐标pos()外,还支持投影变化.下面提供了几种变化item的方式.下面来说明下简单的转换,可以通过调用setRotatio ...

  7. Qt文档阅读笔记-QLatin1String解析及文本段跨行赋值

    QString的许多成员函数都被重载了,用于接收const char *.包括拷贝构造函数.分配符.操作符 insert().replace().indexOf().上述的函数都被优化避免const ...

  8. Qt文档阅读笔记-共享库的创建与调用

    使用共享库的符号 这个符号可以作用在变量.类.函数中,并且这些都可以被调用端使用. 在编译共享库中,需要使用export符号.在使用端调用的时候使用import符号. 这里是本人从文档中记录的笔记,大 ...

  9. Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图

    Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图 QHeightMapSurfaceDataProxy:是Q3DSurface的一个基本代理类. 他是专门加载高度图. 高度图是没有X, ...

最新文章

  1. Java 的类加载顺序
  2. 常用python编程软件-学习编程语言常用的10个工具、库——每个程序员都应该知道...
  3. Java 缺省适配器模式
  4. 删除链表重复节点 python_java删除链表中重复的节点(保留一个节点)
  5. 【转】误差矩阵(混淆矩阵)评价法
  6. Python 5种不为人知的高级特征
  7. 【译】Lesson 1: 一个三角形和一个方块
  8. Java笔记-通过放射获取类中成员名及调用get方法及map构造JSON数据
  9. LeetCode OJ:Combination Sum III(组合之和III)
  10. ASP.NET 4.0尚未在 Web 服务器上注册 解决方法
  11. Solr 05 - Solr Web管理界面的基本使用
  12. linux查看谷歌服务,如何查询Linux服务的作用
  13. Spring Boot打包成jar包
  14. Oracle RAC tns 00505,Alert Log Errors: 12170 TNS-12535/TNS-00505: Operation Timed Out
  15. Python第三方库安装及常见问题
  16. 从unity3d官网下载教程
  17. 【Github上有趣的项目】Deep-Flow-Guided-Video-Inpainting 从视频中抹去一个人(或消除马赛克)
  18. Python报错too many values to unpack解决方案
  19. 区块链技术中隐私计算的技术特点
  20. 架构之重构的 12 条军规

热门文章

  1. webservice的原理及概念
  2. Label显示多行文本总结
  3. 数据新动能:帆软第四届智数大会圆满落幕
  4. 葫芦全身都是宝的飞鸽传书2011
  5. 飞鸽传书是企业网络营销管理专家
  6. 气死N个女孩子的图片
  7. 代码的简单就在于——直接能看懂
  8. 超强Python入门基础知识总结!是时候学起来了
  9. 清华2020计算机系张晨,2020清华特奖入围名单公布:电子系学霸两篇顶会一作
  10. python3 新式类_python新式类和旧式类区别