您的位置:首页 > 编程语言 > Qt开发

Qt moc 功能和限制

2015-11-20 11:26 232 查看
moc的功能数一数

1、处理Q_OBJECT宏和signals/slots关键字,生成信号和槽的底层代码

2、处理Q_PROPERTY()和Q_ENUM()生成property系统代码

3、处理Q_FLAGS()和Q_CLASSINFO()生成额外的类meta信息

4、不需要moc处理的代码可以用预定义的宏括起来,如下:

#ifndef Q_MOC_RUN



#endif

moc的限制数一数(太多了,眼花缭乱)

1、模板类不能使用信号/槽机制

2、moc不扩展宏,所以信号和槽的定义不能使用宏, 包括connect的时候也不能用宏做信号和槽的名字以及参数

3、从多个类派生时,QObject派生类必须放在第一个, 因为moc是这么认为的…(比较流氓) 这也是我们前面的例子触犯的天条

4、函数指针不能作为信号或槽的参数, 因为其格式比较复杂,moc处理不了。但可以用typedef把它定义成简单的形式再使用。(这招可真够绝的)

5、用枚举类型或typedef的类型做信号和槽的参数时,必须fully qualified。这个词中文不知道怎么翻译才合适,简单的说就是, 如果是在类里定义的, 必须把类的路径或者命名空间的路径都加上, 防止出现混淆。如Qt::Alignment之类的,前面的Qt就是Alignment的qualifier, 必须加上,而且有几级加几级。

6、信号和槽不能返回引用类型

7、signals和slots关键字区域只能放置信号和槽的定义,不能放其它的如变量定义等

呵呵,这些限制条款感觉颇像不平等条约, 是不是让你大开眼界了呢? 其实这些限制有一部分应该当作bug来论处,只是对Qt编程影响不算太大,可暂时忽略,所以被归入优先级很低的问题处理了(意思就是可能永远都不改了)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: