Qt moc 功能和限制

转载 2015年11月20日 11:26:11

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编程影响不算太大,可暂时忽略,所以被归入优先级很低的问题处理了(意思就是可能永远都不改了)。

相关文章推荐

QT moc 学习小结

QT moc 学习小结 1 moc  元对象编译器, 全称是 Meta-Object Compiler,也就是“元对象编译器”。是QT翻译扩展语法到C++语言的工具,目前见扩展了信号与槽机制。 2 m...

ROS Kinetic编译旧版本程序出现parse error at boost join

ROS Kinetic编译旧版本程序出现parse error at boost join 主要特征是Qt+Boost编译出现Parse error at "BOOST_JOIN" ...

qt中moc的作用

Qt 将源代码交给标准 C++ 编译器,如 gcc 之前,需要事先将这些扩展的语法去除掉。完成这一操作的就是 moc。 moc 全称是 Meta-Object Compiler,也就是“元对象编译器...
  • lcjwxd
  • lcjwxd
  • 2014年03月07日 14:07
  • 9924

VS 下Qt工程不能生成moc文件的解决方法

选择要moc的类的头文件,鼠标右键,选择property->Item Type:将此项改为Custom Build Tool, 然后看到左边会变成Custom Build Tool: 选择Cust...

为什么模板类不能支持分离编译

源地址:http://blog.csdn.net/ljfxmf/article/details/2510786

Qt 之实用程序 moc 学习

本文关注Qt的工具程序 moc 本身。 moc : 元对象编译器(Meta-Object Compiler) 命令行选项 moc -I/usr/share/qt4/mkspecs/l...

Qt moc 功能和限制

moc的功能数一数 1、处理Q_OBJECT宏和signals/slots关键字,生成信号和槽的底层代码 2、处理Q_PROPERTY()和Q_ENUM()生成property系统代码 3、处理...

Qt编程的禁忌和限制 – moc应该这样用

Qt编程的禁忌和限制 – moc应该这样用

Qt MOC处理器 UML图

  • 2016年03月22日 10:40
  • 72KB
  • 下载

QT 的Moc Uic Rcc有什么用(360ui移植到eclipse)

Moc 主要是用于 将类中包含Q_OBJECT 的类里面的 信号 和槽 处理 成moc_xxx文件。 因为QT 信号与 slot 这一部分不是纯C++的 所以要通过 moc来将 Q_OBJECT的部分...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt moc 功能和限制
举报原因:
原因补充:

(最多只允许输入30个字)