[Qt教程] Inside Qt Series (六):元对象编译器 – Meta Object Compiler (moc)moc, Qt教程
2011-06-13 10:11
615 查看
元对象编译器用来处理Qt 的C++扩展,moc 分析C++源文件,如果它发现在一个头文件(header file)中包含Q_OBJECT 宏定义,然后动态的生成另外一个C++源文件,这个新的源文件包含 Q_OBJECT 的实现代码,这个新的 C++ 源文件也会被编译、链接到这个类的二进制代码中去,因为它也是这个类的完整的一部分。通常,这个新的C++ 源文件会在以前的C++ 源文件名前面加上 moc_ 作为新文件的文件名。 如果使用qmake工具来生成Makefile文件,所有需要使用moc的编译规则都会给自动的包含到Makefile文件中,所以对程序员来说不需要直接的使用moc 除了处理信号和槽之外,moc还处理属性信息,Q_PROPERTY()宏定义类的属性信息,而Q_ENUMS()宏则定义在一个类中的枚举类型列表。 Q_FLAGS()宏定义在一个类中的flag枚举类型列表,Q_CLASSINFO()宏则允许你在一个类的meta信息中插入name/value 对。 由moc所生成的文件必须被编译和链接,就象你自己写的另外一个C++文件一样,否则,在链接的过程中就会失败。 Code example: class MyClass : public QObject { Q_OBJECT Q_PROPERTY(Priority priority READ priority WRITE setPriority) Q_ENUMS(Priority) Q_CLASSINFO("Author", "Oscar Peterson") Q_CLASSINFO("Status", "Active") public: enum Priority { High, Low, VeryHigh, VeryLow }; MyClass(QObject *parent = 0); virtual ~MyClass(); void setPriority(Priority priority); Priority priority() const; }; ====================================================================== 声明: 《Inside Qt Series》专栏文章是(http://www.qkevin.com)原创技术文章。 本系列专栏文章可随意转载,但必须保留本段声明和每一篇文章的原始地址。 作者保留版权,未经作者同意,不得用于任何商业用途 《Inside Qt Series》专栏文章总索引: http://www.qkevin.com/qt 本文原始地址:http://www.qkevin.com/archives/68 |
相关文章推荐
- Inside Qt Series (六):元对象编译器 – Meta Object Compiler (moc)
- Inside QT Series (六):元对象编译器 - Meta Object Compiler (moc)
- Inside Qt Series (六):元对象编译器 – Meta Object Compiler (moc)
- Inside Qt Series (六):元对象编译器 – Meta Object Compiler (moc)
- Qt meta object compiler moc:Invalid argument错误
- Qt 源码之元对象(QMetaObject)
- Qt的元对象(Meta-Object)系统简介
- Qt笔记——MOC(元对象编译器)
- Qt的元对象(Meta-Object)系统简介
- Inside Qt Series (八):Meta Object Class overview
- Qt的元对象(Meta-Object)系统简介
- Qt MetaObject System-- 元对象系统
- Qt的元对象(Meta-Object)系统简介
- Qt的元对象(Meta-Object)系统简介
- Inside Qt Series (九):QMetaObject class data members
- QT手动moc问题:virtual struct QMetaObject const * __thiscall Widget::metaObject
- Inside Qt Series (八):Meta Object Class overview
- Inside Qt Series (八):Meta Object Class overview
- Inside Qt Series (九):QMetaObject class data members
- QT手动生成moc问题:virtual struct QMetaObject const * __thiscall Widget::metaObject