• 18997阅读
  • 11回复

如何使用宏Q_PROPERTY? [复制链接]

上一主题 下一主题
 
只看楼主 倒序阅读 楼主  发表于: 2009-02-10
以下是Qt文档对Q_PROPERTY的描述,我没怎么看明白,语句是什么意思?READ和WRITE是怎么执行的?
Q_PROPERTY(type name
            READ getFunction
            [WRITE setFunction]
            [RESET resetFunction]
            [DESIGNABLE bool]
            [SCRIPTABLE bool]
            [STORED bool])
For example:
Q_PROPERTY(QString title READ title WRITE setTitle)
只看该作者 1楼 发表于: 2009-02-10
高手帮我解答一下,甚是困惑~~
只看该作者 2楼 发表于: 2009-02-10
没有人会吗?真失望,咋办呢?
离线sunnysun520
只看该作者 3楼 发表于: 2009-03-09
转载的:
看到一些qt的程序在使用Q_PROPERTY()宏,参考了一下qt文档,发现定义格式如下:
Q_PROPERTY(type name
           READ getFunction
           [WRITE setFunction]
           [RESET resetFunction]
           [DESIGNABLE bool]
           [SCRIPTABLE bool]
           [STORED bool])
Q_PROPERTY() 是一个宏,用来在一个类中声明一个属性property,由于该宏是qt特有的,需要用moc进行编译,故必须继承于QObject类。在外界看来,property跟类中数据成员没有什么区别,但是还是有几点不一样,参考qt文档,主要有以下几点:
1.必须有一个read函数。
2.有一个可选的write函数。
3.如果定义了"stored"属性表明这是一直存在的。
4.一个reset函数能够把property设置成其默认状态
5.一个"desinable"属性表明该property能在GUI builder(一般为Qt Designer)可见

然后对照这些,自己写了一个例子

class Test : public QObject
{
  Q_OBJECT
  Q_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 work
if(test->property("enabled").toBool())
.....

至于其他的,以后在研究吧。
离线delmore
只看该作者 4楼 发表于: 2009-03-10
看了后,自己实践了下,明白多了。
离线foxyz

只看该作者 5楼 发表于: 2009-03-11
首先这个Q_PROPERTY是个宏,这个宏实际上是需要moc去parse一下的。当然moc去parse是自动完成的如果你使用.pro的话。
其次,QT关于这个的帮助已经非常详尽了,建议去看帮助。当然也有点点欠缺,比如:其实该宏除了READ,WRITE...外还有个部分是NOTIFY这个干什么用的没说,你只有看过源代码才能知道。

既然你自己开始使用这个Q_PROPERTY了那就很可能涉及到designer里边如何展示自己plugin的widgets,这个时候你就能发现,这些PROPERTY都在上边了。当然,自定义复杂类型的designer不认识
离线hrx1989

只看该作者 6楼 发表于: 2011-03-14
看了上面的总结,说实话,还不是很明白是什么意思!!!
离线roywillow

只看该作者 7楼 发表于: 2011-03-14
这个问题我也挺糊涂的
因为搞不懂name、getFunction、setFunction究竟是个怎么的工作的原理……
需要自己再下面声明同名的成员变量和成员函数?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线qust_waiwai

只看该作者 8楼 发表于: 2011-06-11
有点明白了
每一个不曾起舞的日子,都是对生命的辜负。
离线XChinux

只看该作者 9楼 发表于: 2011-06-12
看看moc_xxxx文件里的内容就明白了。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线xiangxiao
只看该作者 10楼 发表于: 2011-09-16
有点意思,多试试看
离线myseemylife

只看该作者 11楼 发表于: 2011-09-16
我猜想(没验证),你用这个宏声明之后。那些get,set的函数。在moc之后就自动弄好了
蠢笨的愚钝~
快速回复
限100 字节
 
上一个 下一个