码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-04-06 00:47:47      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:qt属性系统   声明属性   q_property   

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

 

Qt提供了灵活的属性系统,它基于Qt的元对象系统,不依赖于编译器,这保证了Qt独立于编译其和平台的特点。这篇文章主要看看如何声明属性。

属性系统比较复杂,先看一个简单的例子。在QWidget中,有很多属性的声明,找一个简单学习:

Q_PROPERTY(boolmodalREADisModal)

这里出现了5个元素:Q_PROPERTYboolmodal、READ、isModal。这五个元素都是啥作用呢?

Q_PROPERTY:用于声明属性的宏;

bool:属性类型;

modal:属性名称;

READ isModal:这两个元素是一组,放在一起表示读取该属性的接口为isModal。

这个宏声明完成声明属性的工作么?从声明本身来说算是完成了,但是从实现角度看还没有,我们还得将这个属性用到的成员函数实现了。

再看QWidget的代码,有isModal声明也有相关的实现:

声明在qwidget.h中:

public:

boolisModal()const;

实现在qwidget.cpp中:

inlineboolQWidget::isModal()const

{returndata->window_modality!=Qt::NonModal;}

至此,这个属性才算完整。整理一下,Qt只读属性声明的一般形式为:

Q_PROPERTY(type nameREAD getFunction)

其中:

type:必须是C++默认的类型或者自定义类型;

name:是用于自定义;

READ getFunction:getFunction在该类中必须有相应声明和实现。

还是写一个代码,更容易理解:一个简单的类CObj继承QObject,它有一个成员函数isInTest()用于获取测试标志,我们声明一个testflag的属性,代码如下:

声明:

#ifndef COBJ_H

#define COBJ_H

#include<QObject>

classCObj:publicQObject

{

   Q_OBJECT

   Q_PROPERTY(booltestFlagREADisInTest)

public:

   explicitCObj(QObject*parent=0);

signals:

publicslots:

public:

   boolisInTest(void)const;

};

 

#endif//COBJ_H

实现:

#include "cobj.h"

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

{

 

}

 

bool CObj::isInTest(void) const

{

   return (true);

}

通过上面的代码的,我们为CObj声明了一个testFlag的属性,testFlag是bool型,testFlag的读函数为isInTest。可以这么说,属性系统是在实现了类的功能之后加进去的,先写好成员函数,然后在加属性,应该是这么一个顺序。


本文出自 “QT爱好者” 博客,请务必保留此出处http://qtfuns.blog.51cto.com/5268575/1760640

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

标签:qt属性系统   声明属性   q_property   

原文地址:http://qtfuns.blog.51cto.com/5268575/1760640

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!