QT之Qt之Q_PROPERTY宏理解
在初学Qt的过程中,时不时地要通过F2快捷键来查看QT类的定义,发现类定义中有许多Q_PROPERTY的东西,比如最常用的QWidget的类定义:

Qt中的Q_PROPERTY宏在Qt中是很常用的,那么它有什么作用呢?
Qt提供了一个绝妙的属性系统,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])
之前一直在使用VS开发C++程序,接触过开发Ocx控件会有控件属性设置,Qt这里的属性系统可以和之前的知识联系起来,Qt的属性功能使得我们可以选择访问数据成员的方式,属性就像是类的数据成员,但是在元对象系统中,它的其他特性是到处可见的(相比较于类成员的一般情况下私有化)。
我们使用这个宏的时候,注意两个问题:
1)类型,属性名和READ(读)方法是必须的。也就是前三个参数可必须有的。类型可以是QVariant支持的任一类型,又或者是我们自定义的类型,其他是可选的。下面的title属性定义可以这么来说明:定义一个属性title,类型是QString,读title的方法是title()函数,写title的方法是setTitle,这里USER表示是否用户自定义类型,这里应该设置为false。

2)属性声明完了以后,我们还需要进行读写函数的声明和定义
为什么要使用它呢?在哪里使用它呢?
答:Qt中类的属性是给脚本和元对象系统用的,比如QtScript,QML,或者QObject::property/setProperty……,主要就是用来进行属性封装,在具体的脚本,库,qml开发中必须使用。
最常见的是在QML中访问C++,通过C++类暴露属性来使用,接上面实例如下:
1、新建Qt Quick工程:qt PROPERTY
2、新建C++类TestProperty,公有继承于QObject
3、为TestProperty类设置上述属性title
Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged);
4、属性读写函数声明与实现
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#ifndef TESTPROPERTY_H
#define TESTPROPERTY_H #include <QObject> class TestProperty : public QObject QString title(); signals: public slots: private: }; #endif // TESTPROPERTY_H |
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include "TestProperty.h"
TestProperty::TestProperty(QObject *parent) : QObject(parent) } QString TestProperty::title() void TestProperty::setTitle(QString strTitle) |
5、在main函数中注册这个类,导出到qml中
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <QGuiApplication>
#include <QQmlApplicationEngine> #include <qglobal.h> #include "TestProperty.h" int main(int argc, char *argv[]) QGuiApplication app(argc, argv); qmlRegisterType<TestProperty>(, "TestProperty"); return app.exec(); |
6、在qml中调用title属性
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Window { TestProperty{ Component.onCompleted: { |
运行后:

QT之Qt之Q_PROPERTY宏理解的更多相关文章
- Qt之Q_PROPERTY宏理解
在初学Qt的过程中,时不时地要通过F2快捷键来查看QT类的定义,发现类定义中有许多Q_PROPERTY的东西,比如最常用的QWidget的类定义: Qt中的Q_PROPERTY宏在Qt中是很常用的,那 ...
- 【QT】 Qt多线程的“那些事”
目录 一.前言 二.QThread源码浅析 2.1 QThread类的定义源码 2.2 QThread::start()源码 2.3 QThreadPrivate::start()源码 2.4 QTh ...
- 【Qt】Qt Creator介绍【转】
简介 Qt Creator是使用Qt开发的IDE.Qt支持Windows.Linux/Unix.Mac OS X.Android.BlackBerry.QNX等多种平台,Qt Creator为不同平台 ...
- [Qt Creator 快速入门] 第0篇 开始学习Qt 与Qt Creator
Qt官方信息 Qt官网:http://qt.digia.com/ Qt开源官网:http://qt-project.org/ Qt最新版本下载:http://qt-project.org/downlo ...
- 关于windows下QT以及QT creator的安装
普及 之 windows下qt的安装及配置 qt介绍 : Qt,分为商业.开源两个版本,商业版需要花钱购买license,而开源版本则遵守GPL协议,提供了源码,用户需要自行编译,才能生产动态 ...
- Qt Examples Qt实例汇总
ActiveQt Examples Using ActiveX from Qt applications. Animation Framework Examples Doing animations ...
- 【Qt】Qt之自定义界面(QMessageBox)【转】
简述 通过前几节的自定义窗体的学习,我们可以很容易的写出一套属于自己风格的界面框架,通用于各种窗体,比如:QWidget.QDialog.QMainWindow. 大多数窗体的实现都是采用控件堆积来完 ...
- 【Qt】Qt实战一二三【转】
简介 “我们来自Qt分享&&交流,我们来自Qt Quick分享&&交流”,不管你是笑了,还是笑了,反正我们是认真的.我们就是要找寻一种Hold不住的状态,来开始每一天的 ...
- 【Qt】Qt Assistant介绍【转】
简介 Qt Assistant也就是我们常说的Qt助手,是一款用于呈现在线文档的工具. 简介 一分钟学会使用 Qt参考文档 Qt Assistant详解 命令行选项 工具窗口 文档窗口 工具栏 菜单 ...
随机推荐
- swiper使用总结-坑点汇总
1.开发中遇到个坑,ScrollableTabView(选项卡)+swiper(轮播图)在安卓下,初始化的第一页不会渲染,需要在ScrollableTabView挂载完毕后再渲染swiper. 解决方 ...
- jsp获取map
1.简单Map User user = new User(); user.setName("zmy"); user.setAge(); user.setBirthday(new D ...
- IComparable和IComparer接口
C#中,自定义类型,支持比较和排序,需要实现IComparable接口.IComparable接口存在一个名为CompareTo()的方法,接收类型为object的参数表示被比较对象,返回整型值:1表 ...
- LRU Algorithm Gym - 102394L (HASH)
LRU Algorithm \[ Time Limit: 1000 ms\quad Memory Limit: 524288 kB \] 题意 给出 \(n\) 个数字和 \(m\) 次查询. 每次询 ...
- 从Oop-Klass模型看透反射
<红楼梦>第十二回,贾瑞因痴迷王熙凤,被王熙凤折腾的眼看就快不行了.当然这里面是没有多少爱的,完全因王熙凤的美貌而起.就在这时来了一个跛足道人,带来了一面宝镜,说能治好贾瑞的病.当然这可不 ...
- dubbo-zookeeper demo解析图
- ABP 报错1
报错:.net core 2.2 HTTP Error 502.5 - ANCM Out-Of-Process Startup Failure 解决:安装.net core 2.2就解决了, 本地安装 ...
- [SDOI2018]物理实验 set,扫描线,旋转坐标系
[SDOI2018]物理实验 set,扫描线,旋转坐标系 链接 loj 思路 先将导轨移到原点,然后旋转坐标系,参考博客. 然后分线段,每段的贡献(三角函数值)求出来,用自己喜欢的平衡树,我选set. ...
- 学好Python后可从事岗位+学习Python的难度
一.学好Python好就业: 1.Linux运维.Linux运维是必须而且一定要掌握Python语言,Python可以满足Linux运维工程师的工作需求提升效率,总而提升自己的能力.用Python实现 ...
- keepass口令管理实践
语言修改 加入插件 插件的学习及应用