转自:http://www.hellotongtong.com/Qt5base1/qtmocanalysis-intro.html
3.3 手动使用moc分析信号代码
***【免费下载源码和PPT课件】***
***【在线视频课程(csdn)】***
***【在线视频课程(51cto)】***
3.3 手动使用moc分析信号代码
编辑源代码
为了查看 moc 生成的文件,我们使用一个很简单的 cpp 来测试:
新建文件夹“E:\awork\qt\__learning\chapter3_1_moc”,
新建文件:test.cpp,代码如下:
class Test : public QObject
{
Q_OBJECT
public:
explicit Test(QObject *parent = 0);
signals:
public slots:
};
这是一个空白的类,什么都没有实现。
moc处理
然后用moc处理一下:
moc test.cpp -o moc_test.cpp
在经过编译之后,我们会在输出文件夹中找到 moc_test.cpp:
moc_test.cpp
分析moc文件
可以看到,moc_test.cpp 里面为 Test 类增加了很多函数。
然而,我们并没有实际写出这些函数,它是怎么加入类的呢?
别忘了,我们还有 Q_OBJECT 这个宏呢!
在 qobjectdefs.h 里面,找到 Q_OBJECT 宏的定义:
这下了解了:正是对 Q_OBJECT 宏的展开,使我们的 Test 类拥有了这些多出来的属性和函数。
注意,QT_TR_FUNCTIONS 这个宏也是在这里定义的。
也就是说,如果你要使用 tr() 国际化,就必须使用 Q_OBJECT 宏,否则是没有 tr() 函数的。
这期间最重要的就是 virtual const QMetaObject *metaObject() const; 函数。
这个函数返回 QMetaObject 元对象类的实例,通过它,你就获得了 Qt 类的反射的能力:
获取本对象的类型之类,而这一切,都不需要 C++ 编译器的 RTTI 支持。
好文章,来自【福优学苑@音视频+流媒体】
***【免费下载源码和PPT课件】***
***【在线视频课程(csdn)】***
***【在线视频课程(51cto)】***