[Qt入门篇]6 Qt的属性系统——READ/WRITE/MEMBER

在上一篇文章中,介绍了Qt属性的声明过程,本文主要介绍Q_PROPERTY()中可以使用的关键字。

在Qt5.6中,Q_PROPERTY()总共有12个关键字,本文介绍三个:READ、WRITE和MEMBER。为什么首先这三个?因为一个属性必须有一个读操作,如果没有READ定义,就必须定义MEMBER,否则这个属性无法访问,一个无法访问的属性又有什么意义呢?而WRITE则是与READ相关的操作,它是可选的。

READ fun:定义了读取属性的接口fun,fun必须返回属性的类型或者属性同类型引用;fun不能带参数。

WRITE fun:定义了设置属相的接口fun,fun没有返回值,必须带有一个参数,传值或者传引用,参数类型与属相类型相同。

MEMBER var:MEMBER指明了成员变量var即可读也可写的,相当于同时使用了READ和WRITE关键字。不定义READ,那么必须定义MEMBER;定义了MEMBER,仍可以使用READ或者WRITE控制访问接口。

我们可以换种思路来理解READ、WRITE和MEMBER三个关键字:属性类似与成员变量,我们要修改成员变量时有两种方法,一种是通过类的接口,一种是通过类的对象直接访问。READ和WRITE就是第一种方法,二者定义读写属性(成员变量)的接口,而MEMBER这是第二种方法,直接对成员变量的操作。

还是举例说明以加深理解。

声明文件如下:

#ifndef COBJ_H

#define COBJ_H

#include <QObject>

class CObj : public QObject

{

Q_OBJECT

// READ

Q_PROPERTY(bool p1 READ isInTest)

// READ和WRITE

Q_PROPERTY(bool p2 READ isInTest WRITE SetTest)

// MEMBER

Q_PROPERTY(bool p3 MEMBER m_bflag)

// READ、WRITE和MEMBER

Q_PROPERTY(bool p4 MEMBER m_bflag READ isInTest WRITE SetTest)

// READ和MEMBER

Q_PROPERTY(bool p5 MEMBER m_bflag READ isInTest)

// WRITE和MEMBER

Q_PROPERTY(bool p6 MEMBER m_bflag WRITE SetTest)

public:

explicit CObj(QObject *parent = 0);

signals:

public slots:

public:

bool isInTest(void) const;

void SetTest(bool bflag);

private:

bool m_bflag;

};

#endif // COBJ_H

实现文件如下

#include "cobj.h"

CObj::CObj(QObject *parent) : QObject(parent)

{

}

bool CObj::isInTest(void) const

{

return (true);

}

void CObj::SetTest(bool bflag)

{

m_bflag = bflag;

}

CObj类继承了QObject,我们在CObj中定义了6个属性,p1到p6,分别描述READ、WRITE和MEMBER的使用组合,p1使用了READ,p2使用READ和WRITE关键字,p3使用MEMBER关键字,p4使用READ、WRITE和MEMBER关键字,p5使用了READ和MEMBER关键字,p6使用了WRITE和MEMBER关键字。

看了上述几个属性读写方法,总结一下:

1 Q_PROPERTY定义的属性必须要有一个读方法,不能获取到的属性是没有意义的(不能读的属性不是好属性);

2 定义属性读方法关键字有两个:READ和MEMBER,READ定义读取属性的成员函数(接口),MEMBER定义属性关联的成员变量;

3 WRITE定义写属性接口,它不是必须的;

4 Q_PROPERTY宏中不能使用逗号(,),只能使用空格。

时间: 2024-10-11 06:16:34

[Qt入门篇]6 Qt的属性系统——READ/WRITE/MEMBER的相关文章

[Qt入门篇]5 Qt的属性系统——声明属性

[Qt入门篇]5 Qt的属性系统--声明属性 Qt提供了灵活的属性系统,它基于Qt的元对象系统,不依赖于编译器,这保证了Qt独立于编译其和平台的特点.这篇文章主要看看如何声明属性. 属性系统比较复杂,先看一个简单的例子.在QWidget中,有很多属性的声明,找一个简单学习: Q_PROPERTY(boolmodalREADisModal) 这里出现了5个元素:Q_PROPERTY.bool.modal.READ.isModal.这五个元素都是啥作用呢? Q_PROPERTY:用于声明属性的宏:

[QT入门篇]3 QObject的拷贝构造函数与赋值运算符

本文主要是针对QObject的拷贝构造函数和赋值运算符进行说明.先来看一下拷贝构造函数定义:拷贝构造函数,又称复制构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化.其唯一的形参必须是引用,但并不限制为const,一般普遍的会加上const限制.此函数经常用在函数调用时用户定义类型的值传递及返回.拷贝构造函数要调用基类的拷贝构造函数和成员函数.如果可以的话,它将用常量方式调用,另外,也可以用非常量方式调用. 还记得<[QT入门篇]1 QT中的对象模型>中

Qt入门之常用qt控件认知之QLabel

QLabel是Qt最为基本和常用的一个控件.其定义包含在<QLabel>中. 1.整体简介(QLabel功能):QLabel的功能就是显示文字或者图片,没有用户交互功能,这也就是经常不位QLabel控件设置焦点的原因,QLabel外观可以通过不同的方式进行设置,同时有一个非常重要的功能,其可以作为另外一个控件的焦点助记键,即设置QLabel快捷键则将焦点跳到指定的控件,如QLineEdit,此控件通过QLabel的setBuddy函数设置. QLabel可以使用的类型及设置方法: 纯出文本或者

Qt入门之常用qt控件认知之QLayout

了解布局,首先得清楚一个概念,就是容器控件.容器控件就是可以容纳别的控件的一种控件,如QWidget,所以就会出现父类控件与子类控件.为了很好的管理这种父子类控件,常用的有几种方法: 第一种就是使用绝对位置,setGeometry定位子类控件相对于父类控件.第二种就是常见的布局. 布局管理,其实就是为容器控件管理子类控件的位置和尺寸,所以布局本身没有存在的意义,其需要和容器控件搭配使用,为容器控件管理子控件服务. 而布局QLayout类其实只是一组预先撰写好的代码,相当于提前写出了以一个控件存放

topic4:Qt入门之常用qt控件认知之Button系列

按钮,常常被理解为触发一种动作请求或者命令,是与用户进行指令交互的操作.Qt中Button系列根据用途被划分为不同的定义,其实现框架为QAbstractButton提供按钮的通用性功能,此为抽象基类,所以无法进行实例化.用户需要继承定义此类,实现paintEvent,实现具体的展示.常见的Button有QPushButton,QToolButton,QRadioButton及QCheckBox.这种根据用户分为标记(toggle)的与非toggle的.此种模式用到的典型的c++一种抽象继承模式,

Qt入门之常用qt控件认知之QLineEdit

QLineEdit是继QLabel和QAbstractButton之后最为常见的输入类编辑控件.顾名思义,其是单行编辑控件,经常用于编辑简短的信息,如用户登录信息及密码输入等.作为编辑框其具有常见的编辑动作,如清除内容clear,复制copy,剪切cut,粘贴paste,重做rudo.撤销undo,全选selectAll及设置编辑信息setText及删除dselete和del及backspace.根据编辑的内容及显示,QLineEdit有不同的显示模式:QLineEdit:::Normal 正常

【Qt入门实践】Qt之哲学家问题(linux 多线程)

转载请注明出处:http://blog.csdn.net/feng1790291543 linux多线程实现哲学家问题,依据哲学家吃饭.拿筷子.放下筷子...... 首先,主线程使用Qt下的GUI的简单一个button控制即可了 maindesttop.cpp #include "maindesttop.h" #include "ui_maindesttop.h" QMutex mutex01; QMutex mutex02; QMutex mutex03; QMu

Qt入门之基础篇 ( 二 ) :Qt项目建立、编译、运行和发布过程解析

转载请注明出处:CN_Simo. 题解: 本篇内容主讲Qt应用从创建到发布的整个过程,旨在帮助读者能够快速走进Qt的世界. 本来计划是讲解Qt源码静态编译,如此的话读者可能并不能清楚地知道为何要静态编译,所以借此篇内容说明一下原由并为之后文章的学习做准备. 即使本片内容只是在围绕一个小小的HelloWorld程序开展,但还是希望朋友们不要急于求成,"欲速则不达". 文章整体思路: 我们循序渐进地来看,一个Qt应用的完成有以下一个重要的步骤: 项目创建->源码编译->程序运行

Qt入门之基础篇 ( 一 ) :Qt4及Qt5的下载与安装

转载请注明出处:CN_Simo. 导语: Qt是一个跨平台的C++图形界面应用程序框架.它提供给开发者建立图形用户界面所需的功能,广泛用于开发GUI程序,也可用于开发非GUI程序.Qt很容易扩展,并且允许真正地组件编程.基本上,Qt同X Window上的Motif,Openwin,GTK等图形界面库以及Windows平台上的MFC.OWL.VCL.ATL是同类型的东西. 本系列教程以Qt5.6为基础展开精讲. 参考书目: [1]霍亚飞.Qt Creator快速入门(第3版).2017年 [2]蔡