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

QT moc 学习小结

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

Qt(2):MOC文件解析

在Qt下,从QObject派生的类都会生成moc_文件。 1. 比如现在有2个文件,qmyobject.h和qmyobject.cpp,它里面有一个类QMyObject,记为版本A class...
  • oldmtn
  • oldmtn
  • 2015年06月03日 16:33
  • 3095

Qt中moc问题(qt moc 处理 cpp)

我用的是QT Designer,一般只有用到信号signals和槽slots时才会用到MOC,因为采用信号signals和槽slots是QT的特性,而C++没有,所以采用了MOC(元对象编译器)把信号...
  • u012135652
  • u012135652
  • 2015年11月27日 14:54
  • 1265

VS+Qt5生成moc文件

1.选择没有生成moc文件的头文件,右键,点击属性 2.在配置属性中选择常规,将项类型修改为“自定义生成工具” 3.修改自定义生成工具--常规中的“命令行”和“输出”两项 命令行:"$(QTD...
  • sjt091110317
  • sjt091110317
  • 2015年11月12日 09:57
  • 2442

Qt里的moc

在Visual Studio中通过moc给Qt配置预编译头文件(Predefined Headers) 收藏 我创建Qt工程的方法是先用QCreator创建一个简单的程序,设计一些UI,然后用qm...
  • normallife
  • normallife
  • 2009年08月04日 16:10
  • 10023

qt moc笔记

STEP1 编译UI文件,生成[UI头文件] 命令行: "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_$(InputName).h" "$(Inpu...
  • ZXGIS
  • ZXGIS
  • 2012年11月30日 14:34
  • 5536

Qt自动生成moc文件

命令行生成moc文件的方式: cd C:/Qt/4.7.1/bin moc  .h文件群路径 -o 要生成的moc文件的全路径; 例如: VS中不是用addin创建的项目,自动生成...
  • xiaofengkuang
  • xiaofengkuang
  • 2013年08月16日 13:25
  • 11721

QT下moc的编程限制

moc并不能处理所有的C++特性。我们可以回想上一节的元对象系统及信号和槽的实现机制,这些实现中很少处理C++的重要特性之一——模板,是的moc对模板的支持非常有限,对预编译宏的处理也不够完善。由于信...
  • imxiangzi
  • imxiangzi
  • 2016年04月09日 11:19
  • 599

Qt moc 功能和限制

moc的功能数一数 1、处理Q_OBJECT宏和signals/slots关键字,生成信号和槽的底层代码 2、处理Q_PROPERTY()和Q_ENUM()生成property系统代码 ...
  • liulihuo_gyh
  • liulihuo_gyh
  • 2015年11月20日 11:26
  • 401
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt moc 功能和限制
举报原因:
原因补充:

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