文档章节

qt中moc的作用

xxdd
 xxdd
发布于 2016/10/24 13:58
字数 279
阅读 15
收藏 0

Qt 将源代码交给标准 C++ 编译器,如 gcc 之前,需要事先将这些扩展的语法去除掉。完成这一操作的就是 moc。

moc 全称是 Meta-Object Compiler,也就是“元对象编译器”。Qt 程序在交由标准编译器编译之前,先要使用 moc 分析 C++ 源文件。如果它发现在一个头文件中包含了宏 Q_OBJECT,则会生成另外一个 C++ 源文件。这个源文件中包含了 Q_OBJECT 宏的实现代码。这个新的文件名字将会是原文件名前面加上 moc_ 构成。这个新的文件同样将进入编译系统,最终被链接到二进制代码中去。因此我们可以知道,这个新的文件不是“替换”掉旧的文件,而是与原文件一起参与编译。另外,我们还可以看出一点,moc 的执行是在预处理器之前。因为预处理器执行之后,Q_OBJECT 宏就不存在了。

在命令行下输入moc yourfilename.h -o moc_youfilename.cpp生成不带Q_OBJENT的源文件。

 

© 著作权归作者所有

xxdd
粉丝 3
博文 54
码字总数 12958
作品 0
海淀
程序员
私信 提问
QT的 Meta-Object系统

前面说过,Qt使用的是自己的预编译器,它提供了对C++的一种扩展。利用Qt的信号槽机制,就可以把彼此独立的模块相互连接起来,不需要实现知道模块的任何细节。 为了达到这个目的,Qt提出了一个...

晨曦之光
2012/04/13
270
0
Qt中undefined reference to vtable for "xxx::xxx"的总结

Qt中,undefined reference to ‘vtable for 通常出现在打开了宏 Q_OBJECT的程式当中。我遇到的情况是: 将类体及类体实现直接写到main.cpp里,没 有包含 moc文件。这是一种常见的C++错误,通...

乔三爷
2016/06/03
28
0
Qt 出现“undefined reference to `vtable for”原因总结(转)

由于Qt本身实现的机制所限,我们在使用Qt制作某些软件程式的时候,会碰到各种各样这样那样的问题,而且很多是很难,或根本很难找到原因的,即使解决了问题,假如有人问您为什么,您只能回答-...

mjrao
2013/04/06
0
0
加入Q_OBJECT后出现错误

环境: QT库,没有使用QT_CREATOR.也没有设置环境变量,仅将QT库作为VS2005的第三方库使用,库中动态库为发布时生成库。 环境配制: (1)将QT中的包含库加入到vs2005的附加包含目录中,工程配...

renwoxingshen
2018/06/26
0
0
Qt 之 qobject_cast 分析及QTBUG 20616

适用范围 qobject_cast 用于两种情况: QObject 及其派生类,且定义时使用了Q_OBJECT Q_DECLARE_INTERFACE 声明的接口类(不需要是QObject的派生类) 问题:如果既是QObject派生类,又用Q_DEC...

晨曦之光
2012/05/08
613
0

没有更多内容

加载失败,请刷新页面

加载更多

Oracle SQL语法实例合集

如需转载请注明出处https://my.oschina.net/feistel/blog/3052024 目的:迅速激活Oracle SQL 参考:《Oracle从入门到精通》 ------------------------------------------------------------......

LoSingSang
今天
2
0
增加 PostgreSQL 服务进程的最大打开文件数

https://serverfault.com/questions/628610/increasing-nproc-for-processes-launched-by-systemd-on-centos-7 要在systemd的配置里加才行...

helloclia
今天
2
0
组合模式在商品分类列表中的应用

在所有的树形结构中最适合的设计模式就是组合模式,我们看看常用商品分类中如何使用。 先定义一个树形结构的商品接口 public interface TreeProduct { List<TreeProduct> allProducts(...

算法之名
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部