Qt工作笔记-Qt之自定义属性Q_PROPERTY
QT提供了一个成熟的属性系统,但是作为一个跨平台的且与编译器无关的库,qt不依赖于非标准的编译器功能例如 __property or [property];
QT的强大之处在于它可以支持任何标准的c++编译器。 QT是基于 Meta-Object System(元对象)和signals and slots(信号槽)的。
Q_PROPERTY
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])
可能还不太好理解 不过下面介绍几个特殊的例子你就豁然开朗了。
Q_PROPERTY(bool focus READ hasFocus)
Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)
Q_PROPERTY(QString title READ title WRITE setTitle USER true)
一个属性行为类似于类里面的数据成员,但是他是却可以通过Meta-Object System来访问。 在外界看来,property跟类中数据成员没有什么区别,但是还是有几点不一样,参考qt文档,主要有以下几点:
1.必须有一个read函数。它用来读取属性值。因此用Const限定。它的返回值类型必须为属性类型或者属性类型的引用或者指针。不能是其他类型例如:QWidget::hasFocus().
2.有一个可选的write函数。它用来设置属性值,它的返回值必须为void型,而起必须要含有一个参数。例如:QWidget::setEnabled()
3.一个reset函数能够把property设置成其默认状态,它也是可选的。复位功能必须返回void,并且不带参数,
4.一个NOTIFY信号是可选的 。如果定义,它提供了一个信号这个信号在值发生改变时会自动被触发。
5.如果定义了"STODE"属性表明这是一直存在的。QWidget::minimumSize() 6.一个"DESIGNABLE"属性表明该property能在GUI builder(一般为Qt Designer)可见
7.USER 属性 表面是否可以被用户所编辑
8 CONST设定属性是不可修改的 所以不能跟WRITE或者NOTIFY同时出现
9 FINAL表明该属性不会被派生类中重写
然后对照这些,自己写了一个例子:
class Test : public QObject {Q_OBJECTQ_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)public:Test(QObject *parent = 0) : QObject(parent) {}virtual ~Test(){}void setEnabled(bool e) { enabled = e; }bool isEnabled() const { return enabled; }private:bool enabled;};
然后在主函数中添加:
Test *test = new Test;test->setProperty("enabled", true);//test->setEnabled(true); //ok also workif(test->property("enabled").toBool()) .....
如果你不用QML,不用QtScript,不用于创建Designer插件,不使用QItemDelegate,不使用ActiveQt,不使用...... 的话,那么Q_PROPERTY确实没用。
Qt工作笔记-Qt之自定义属性Q_PROPERTY相关推荐
- Qt工作笔记-Qt元对象系统解析【2合1】
博文转载地址: https://blog.csdn.net/spwper/article/details/51332187 说Qt信号与槽是一个很好机制,不如说Qt的元对象系统很强大.这也是大家讲Qt ...
- Qt工作笔记-Qt连接Mysql数据库,检索及修改表数据
目录 原理 演示及现象 原理 因为要对数据库进行操作,然后用某个程序看现象,如果有一个进程,能对指定表中的所有数据进行批量修改,那么看现象将会多么的明显啊! 个人感觉实现这种功能大体有两种思路,一个是 ...
- Qt工作笔记-Qt移植到Linux上时提升窗口部件大小写问题(VS上存在的问题)
目录 理论 模拟问题 理论 在Windows里面那些.h文件是不区分大小写的,但在Linux上是区分大小写的,这也就是为什么用VS去创建一个类的时候,这个类的类名会和.h文件一样,而用Qt Creat ...
- Qt工作笔记-Qt生成dll或so,并且调用(含Liunx端与Windows端)
目录 共享库生成 Linux端编译及调用 Windows端编译及调用 共享库生成 注意:编译的时候要用lib,相当于列表,关联dll中的函数! 这里首先用Qt Creator 新建一个共享库 如下图: ...
- Qt工作笔记-Qt文档笔记-QPainter::drawText写文本并且居中
官方解析 画给定的text并且从指定的position. 这个函数不能处理换行符号(\n),不能将文本分割成多行,也不能分行展示.使用QPainer::drawText()的重载函数可以绘制一个多边形 ...
- Qt工作笔记-Qt奇淫技巧把ToolBar改成标题栏
运行截图如下: 这个是工具栏被改造成了标题栏,放大的时候,他也能正常显示. 1.获取屏幕分辨率: 2.重写QToolBar: 3.自定义Label,用于鼠标移动上去造成不同的效果: 关键源码如下: 1 ...
- Qt工作笔记-Qt creator如何生成dll,以及如何移植到vs上
首先用Qt Creator创建一个库项目: 在类中添加一个add函数,并实现他: 直接就可以生成为一个dll 因为是使用MinGW的编译器所以会有.a文件: 把程序移动过去! 接着用另外一个项目进行调 ...
- Qt工作笔记-Qt仿大佬使用关键字(Q_DECL_OVERRIDE与override)
今天看到某大佬的源码里面用了这个 Q_DECL_OVERRIDE 在虚函数屁股后面写了这个! 这难道是脱裤子打屁吗? 对此查了下,文档如下: 这玩意和override一样,为了防止写错(在使用Qt C ...
- Qt工作笔记-Qt文档阅读笔记-qualifiedName()的官方解析及XML使用名称空间
目录 官方解析 博主例子 官方解析 QXmlStreamReader::qualifiedName() 返回StartElement或EndElement的限制名: 限制名是XML数据中元素的原始名称 ...
最新文章
- Java正则入门(1)——去除字符串头尾空格
- 《2020城市大脑全球标准研究报告》全文正式开放申领
- Shell脚本之条件判断
- 一个“alert” 引发的血案
- npm install引起的项目崩溃(This is probably not a problem with npm,there is likely additional logging outp)
- 安卓系统应用启动流程分析
- 定时器控件 Timer 1130
- 03数据库的基本查询
- Kafka模拟实现(用于自我测试环境)
- 世界是数字的读后感:
- status函数python_python之路-函数
- python 3.6 pyltp 安装
- WebSocket多人聊天室
- 电脑BIOS为UEFI BIOS,出现蓝屏情况“你的设备遇到问题,需要重启。我们只收集某些错误信息,然后你可以重新启动。100%完成“,解决方法。
- 神之bug 嵌套RecyclerView谜之滚动
- java 模板模式_java设计模式之模板方法模式详解
- ORA-12514: TNS:listener does not currently know of service requested in connect descript
- 刚刚!霍金向北京喊话:人类需要大胆前行,涉足无前人所及之处
- 2023年闷声发大财的6个风口行业
- 如何计算EEG信号的香农熵Shannon entropy(附Matlab程序)
热门文章
- c# winform TreeView与ListView的项互相拖动的应用[转载]
- Object类的用法(一)
- CIO必看:7个常见但一定要避免的数据治理错误
- “不翻身,就要翻船”!帆软独家:制造业数字化转型解决方案
- 【转载】C++中cin、cin.get()、cin.getline()、getline()、gets()函数详解
- 就要有鹤立鸡群的HTML5资本
- Python3基本数据类型快速入门
- 计算机文档用什么翻译,Word文档翻译在哪里(适于Word2010-Word2016)?
- mysql 一对多 join_Mysql中FIND_IN_SET与JOIN在一对多关系查询时的优劣
- 决策树算法学习笔记(提升篇)