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", 1, 0, "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 |
import QtQuick 2.9
import QtQuick.Window 2.2 import TestProperty 1.0 Window { TestProperty{ Component.onCompleted: { |
运行后:
转载于:https://www.cnblogs.com/MakeView660/p/10813829.html
QT之Qt之Q_PROPERTY宏理解相关推荐
- Qt属性系统及Q_PROPERTY宏的使用
0.前言 像某些编译器提供的平台特有的属性系统(Property System)一样,Qt也提供了一个复杂的属性系统.当然,作为一个跨平台框架,Qt没有依赖那些非标准的编译器特性,比如:__prope ...
- Qt pro文件下跨平台宏的使用(windows/linux 以及x86 和 arm的区分)
#Qt pro文件下跨平台宏的使用(windows/linux 以及x86 和 arm的区分) 在pro文件中添加: #仅在linux 系统下, 硬件平台无关的内容 unix{HEADERS += \ ...
- Qt获取时间、日期宏定义
Qt获取时间.日期宏定义 #define QDATE qPrintable(QDate::currentDate().toString("yyyy-MM-dd")) #define ...
- 【Qt】Qt学习笔记(更新中)
文章目录 0x00 前言 0x01 Qt简介 1.1 Qt是什么 1.2 Qt发展史 1.3 Qt支持的平台 1.4 使用Qt开发的软件 1.5 Qt的优点 1.6 其它 0x02 创建Qt项目 2. ...
- 【Qt】Qt样式表总结(三):QObject 属性
[Qt]Qt样式表总结(一):选择器 [Qt]Qt样式表总结(二):冲突和命名空间 QObject 属性 可以使用 qproperty < 属性名称 > 语法,设置任何可以Q_PROPER ...
- 【Qt】Qt数据库简介
00. 目录 文章目录 00. 目录 01. Qt SQL模块简介 02. 数据库类 03. 数据库驱动 04. 测试代码 05. 附录 01. Qt SQL模块简介 本概述假定您至少具有SQL的基本 ...
- 关于Qt、Qt/E、Qtopia、qvfb、framebuffer、qpe等概念的对比介绍
最近要在嵌入式linux平台下搞UI界面开发,经过一番挑选,决定使用Qt作为UI开发平台.不过Qt中所涉及的Qt/E.Qtopia.qvfb.framebuffer.qpe等众多概念,却有点剪不断理还 ...
- 【QT】QT从零入门教程(七):图像适应窗口
在第5节里,我们讲解了初始化图像框QLabel的方法,用于显示图像.在第6节里,运用QDockWidget实现了基本窗口布局.在显示图像时,如果打开比QLabel大的图像,会自动出现滚动条.这样能 ...
- Qt 与 Qt Creator 简介
该文章原创于Qter开源社区(www.qter.org),作者 yafeilinux,转载请注明出处! 一.Qt 与 Qt Creator 简介 Qt 是一个跨平台应用程序和 UI 开发框架.使用 Q ...
最新文章
- Windows消息队列
- C语言中do...while(0)用法小结
- php strrchar,php文件上传
- 打造最美HTML5 3D机房(MONO哥强势归来,第四季惊艳发布)
- Linux信号列表(非实时信号和实时信号)
- RequireJS 主入口加载模块经常会加载失败的问题
- Java学习小程序(4)数列求和
- IP地址和子网划分学习笔记之《预备知识:进制计数》
- 教你如何用双SATA硬盘组建RAID系统
- 实战ReactNative 从入门到精通 重要技术解析,5分钟搭建iOS, Android App 实战一
- 2017OKR年终回顾与2018OKR初步规划
- MySQL数据库通过data文件夹恢复数据库信息
- 阿米巴经营之软件经营-写得不错留作记念
- Oracle-----同义词索引
- 【实战技能】Google I/O 2022大会AI/ML给开发者的启发
- 计算机毕业设计之java+javaweb的电动车实名制挂牌管理系统
- nginx中deny和allow详解
- MFC链表CList类
- [Word]:Microsoft word中插入代码 PlanetB, 批量上标
- 开启xmp1还是2_2020年11月2日大盘走势总结
热门文章
- sublimText3在ubuntu下的中文支持
- jQuery框架学习第十天:实战jQueryUI常用功能
- 深度学习《CycleGAN》
- jdbc关于操作Oracle时间数据解析
- 数学基础 —— 线性代数
- leetcode - 375. 猜数字大小 II
- 使用deeplearning4j训练Doc2Vec(文档向量)
- VC++开发演算稿式计算语言-可编程绘图的计算器
- Opencv 中cv开头的函数和没有cv的区别,例如cvWaitkey()和waitKey()的区别
- 随机样本一致性:一种用于图像分析和自动制图的模型拟合模型(2)--(P3P)