标题:【原创】Qt里的属性(property)
作者:giscn
日期:2005-08-23 18:15
内容:
Qt里的属性(property)
giscnmsncom
1.属性有什么用?
由于c++类具备封装特性,不推荐对类成员变量(class variables)进行直接存取。现代编译器引用属性(property)的概念,对成员变量进行安全的存取。比如在win平台下 vc7有类似于__property或的支持。Qt由于要实现其跨平台(cross platform),引入一套独特的属性系统。其底层是由meta compiling进行支持。
2.格式
Q_PROPERTY(type name
READ getFunction
)
* Q_PROPERTY: qt里定义的宏;
* type name: 即类型名+属性名,属性名(name)在QObject的setProperty里被引用;
* READ: 设置读取成员变量的函数名,一定要是const,可以返回void,Qvariant支持的对象,指针,或const的引用。READ是必须的,而write, reset等则是可选的;只有READ的属性为只读属性;
* WRITE: 写成员变量的函数名,返回值必须是void,可以设置一个参数,这个参数可以是void,QVaraint支持的变量,指针,或const的引用。可选;具备READ和WRITe的属性是可读写属性。
* DESIGNABLE: 指示该属性是否被图形编辑器(比如designer)使用。默认是TRUE;
* SCRIPTABLE: 指示是否在script里使用,Trolltech公司同时有基于Qt的QSA,用于在应用程序的脚本编程;默认是TRUE;
* STORED: 指示是否可被持久化(persistence)。只有WRITE被设定的时候,STORED才有效。默认是TRUE。
3. 使用
比有一个类,
class MyClass : public QObject
{
Q_OBJECT
public:
MyClass (QString f) {this->f =f;}
~MyClass() {}
//property begin
QString getF() const {return f;}
void setF(QString ff) {f=ff;}
//property end
private:
QString f;
};
这时在public之前定义property
Q_PROPERTY (QString F READ getF WRITE setF)
照惯例,读取函数往往省略get,即定义了
QString F() const {return f;}
这时,Q_PROPERTY (QString F READ F WRITE ..
#1 [yfy002 08-24 09:32]
不错不错,顶,支持原创
#2 [yanboo 08-24 09:40]
学习中
#3 [giscn 08-24 11:43]
4.0.1里property如果以 引用 作输入参数,不能编译,好象它的MOC系统有些问题。已经提交到Qt development team
但4.0.0没有问题
#4 [XChinux 08-24 11:45]
4.0.1里去除了老错误,但引进了些新错误。
希望早点能修复。
#5 [zwcxxl 09-16 21:38]
还没有搞懂是什么意思:)能否麻烦大虾给我们详细系统的讲解一下,多谢;)