导航:首页 > 源码编译 > 为什么qt编译会生成moc文件

为什么qt编译会生成moc文件

发布时间:2022-12-11 10:16:41

1. moc文件是什么在哪可以找到有什么作用....

QT中的moc?
moc是QT的预编译器,用来处理代码中的slot,signal,emit,Q_OBJECT等。
moc文件是对应的处理代码,也就是Q_OBJECT宏的实现部分,在官方文档上有详细说明,与其文件在同一目录下。

2. QT信号槽实现原理

先放一个简单的信号槽的实现,如下:
mainwindow.h

mainwindow.cpp

由于头文件中有 Q_OBJECT ,则在编译后会生成一个moc_mainwindow.cpp文件,该文件由moc生成。

先看下 Q_OBJECT 宏的定义

用于不同的 class 返回自己的 staticMetaObject。如果QObject实例的metaObject 不为空,则调用 QObjectData::dynamicMetaObject() ,否则返回自己的staticMetaObject地址。

根据传入的类名,返回对应的实例。

在每一个QMetaObject对象中,槽、信号以及其它的对象可调用函数都会分配一个从0开始的索引。索引是有顺序的,信号在第一位,槽在第二位,最后是其它函数。这个索引在内部被称为相对索引,不包含父对象的索引位。为了实现包含在继承链中其它函数的索引,在相对索引的基础上添加一个偏移量,得到绝对索引。绝对索引是在公开API中使用的索引,由QMetaObject::indexOf(Signal, Slot, Method) 类似的函数返回。
多个信号槽对,会依次递增序号比如:

根据Id处理。当信号发射时,QT会掉用qt_metacall,并把QMetaObject::Call设置为QMetaObject::InvokeMetaMethod。该函数同样处理属性系统,根据传入的不同的QMetaObject::Call来处理。
第二个参数是一个索引,用于唯一标识当前对象继承的类的层次结构中的信号或槽。最后一个参数是一个数组,其中包含指向参数的指针,其后是指向应放置返回值的位置(如果有)的指针,对于信号槽机制,代表则传入的参数列表。

3. qt 有些源码后面 为什么 会添加一个 include "moc

moc_文件是自动生成的啊。
你带上头文件OBJECT这个关键字之后, 就会自动帮你生成,把你的slots或者signal之类的统统生成一个MOC文件。。嗯,应该是的

4. qt.ui 文件.ui文件是怎么生成相应的.h文件的

el moro been ope!" it was thal

阅读全文

与为什么qt编译会生成moc文件相关的资料

热点内容
centos复制命令 浏览:286
30岁的运维学python 浏览:985
ospfpdf 浏览:712
安卓耳机声音小怎么设置 浏览:196
程序员升级win11后 浏览:594
云服务器怎么调出控制面板 浏览:171
python正则表达式函数 浏览:632
把自己公司的源码给别人 浏览:436
典韦真的要出程序员皮肤吗 浏览:680
程序员如何转行做电脑维修 浏览:395
4mz算法 浏览:831
程序员全部穿格子图片 浏览:921
申通取件加密 浏览:817
颜色改变命令 浏览:679
海口童程童美学编程怎么样 浏览:694
vb编程未找到方法 浏览:239
三国战记命令 浏览:922
程序员穿运动鞋 浏览:505
自来水公司需要电脑编程 浏览:309
金融app如何从银行卡扣款 浏览:556