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详解 命令行选项 工具窗口 文档窗口 工具栏 菜单 ...
随机推荐
- 13-cmake语法-路径设置
路径设置: 包括头文件路径.库文件路径.库文件名等 INCLUDE_DIRECTORIES 向工程添加多个特定的头文件搜索路径,路径之间用空格分隔,如果路径包含空格,可以使用双引号将它括起来,默认的行 ...
- Anaconda3(5-1)程序编辑器 自带的spyder
1装好后自带spyder编辑器 2 打开软件 3 每次程序需要制定anaconda3中创建的虚拟环境对应 的python版本的路径 例如在我的电脑我创建了两个环境 而我的pytorch安装在pytho ...
- ESA2GJK1DH1K基础篇: 阿里云物联网平台: 测试MQTT客户端接收云平台的数据
前言 有时候想想可能直接连接现成的感觉比较方便吧! 这种东西考验的是你底子是否够好,是否有很强的学习能力 因为咱就是看文档,理解文档.用文档. 测这节会感觉:这是啥呀...下一节更精彩,但是必须看这节 ...
- VUE温习:内存泄漏、Vue.$set、key作用与虚拟diff算法
一.内存泄漏 1.指令绑定了事件,却没有解绑事件,容易产生内存泄漏.(曾经遇到过的案例) 2.v-if指令产生内存泄漏,比如v-if删除了父级元素,却没有删除父级元素里的dom片段 3.跳转到别的路由 ...
- 【louguP2234】[HNOI2002]营业额统计(链表)
题目链接 离线用链表维护,先按权值排序,建立链表,记录每一天在链表的位置,然后按天数从大到小查询,查询完删除 #include<algorithm> #include<iostrea ...
- VS Code 安装与配置(使用MSYS2环境与mingw-w64 编译环境)
更正了顺序,之前不知道怎么回事,内容顺序乱了 力求完美.详细,所以希望懂的人留言指点一下. 目前已经开始添加原理解释,希望大家能分享一些gcc gdb C语言等方面优秀链接 后续会慢慢增添内容,修正 ...
- HTML5 - 开发一个自己的websocket服务器
应用:node.js 主要步骤: 创建文件夹 创建app.js(server入口,app为自定义命名) npm init -y (快速创建一个package.json文件) 依赖包安装:nodejs- ...
- salt 安装
list: centos 6.5 x86_64 172.18.39.28 mast.test.com 172.18.39.27 mini.test.com master:#sudo yum insta ...
- Linux内核kobject结构体分析
1.前言 Linux内核中有大量的驱动,而这些驱动往往具有类似的结构,根据面向对象的思想,可以将共同的部分提取为父类,而这个父类就是kobject,kobject结构体中包含了大量设备的必须信息,而三 ...
- LaTeX 小试牛刀
跟大家分享一下正式第一次使用 LaTex 的经验,之前数学建模的时候一直想用,但没有找到合适的软件.前段时间,实验室老师让我帮忙套个 IEEE ACCESS 的模板. 尝试过 TexPad,的确 UI ...