Inside Qt Series (六):元对象编译器 – Meta Object Compiler (moc)
2013-08-28 14:13
453 查看
作者:Q-Kevin @ http://www.qkevin.com
元对象编译器用来处理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
前一篇:元对象系统(Meta-Object System), http://www.qkevin.com/archives/66
后一篇:Signal & Slot, http://www.qkevin.com/archives/74
======================================================================
元对象编译器用来处理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
前一篇:元对象系统(Meta-Object System), http://www.qkevin.com/archives/66
后一篇:Signal & Slot, http://www.qkevin.com/archives/74
======================================================================
相关文章推荐
- Inside Qt Series (六):元对象编译器 – Meta Object Compiler (moc)
- [Qt教程] Inside Qt Series (六):元对象编译器 – Meta Object Compiler (moc)moc, Qt教程
- Inside QT Series (六):元对象编译器 - Meta Object Compiler (moc)
- Inside Qt Series (六):元对象编译器 – Meta Object Compiler (moc)
- Qt meta object compiler moc:Invalid argument错误
- Inside Qt Series (八):Meta Object Class overview
- 读书笔记《Inside the C++ Object Model》:关于对象
- Qt MetaObject System-- 元对象系统
- Inside Qt Series (四):对象数据存储(C)
- Qt的元对象(Meta-Object)系统简介
- 《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记
- Inside the C++ Object Model 第一讲: 关于对象
- Qt笔记——MOC(元对象编译器)
- Inside Qt Series (九):QMetaObject class data members
- Inside the C++ Object Model 深度探索对象模型 5-Construction 6-Runtime 7-Object
- C++对象模型,很多东西来自《Inside the C++ Object Model》一书
- Inside The C++ Object Model 学习笔记 -- 关于对象
- 《inside the c++ object model》读书笔记 之七 站在对象模型的尖端
- Qt的元对象(Meta-Object)系统简介
- Inside QT Series (八):Meta Object Class