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编程影响不算太大,可暂时忽略,所以被归入优先级很低的问题处理了(意思就是可能永远都不改了)。
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编程影响不算太大,可暂时忽略,所以被归入优先级很低的问题处理了(意思就是可能永远都不改了)。
相关文章推荐
- Qt之右键菜单实现
- QT创建透明窗体
- Qt Creator快捷键
- Qt Creator快捷键
- Ⅰ.2.9.如何测试支持国际化的Qt AUT
- 使用VS开发Qt项目时编译速度慢的问题解决
- Qt共享内存实现进程间通信(QSharedMemory)
- QTP自动化测试之VBScript对象
- QTP自动化测试之VBScript基础(下)
- QTP自动化测试之VBScript基础(上)
- Qt 实现excel加法
- Qt 查询文档
- Qt的QTabelWidget
- MQTT常见问题
- 关于Qt的事件循环以及QEventLoop的简单使用
- pyqt学习
- QT无法编译#include *.moc的项目,报No such file or directory
- VTK6.2 Qt5.4.0 VS2013
- Qt从零开始制作串口调试助手-(第十章、串口接收数据处理)-Creator_Ly
- QT中文乱码