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