Q_OBJECT宏的作用是启动Qt元对象系统的一些特性(比如支持信号和槽等),它必须放置到类定义的私有区。
class Dialog: public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = 0);
private:
……
}
Qt元对象系统提供了对象间的通信机制(信号和槽)、运行时类型信息和动态属性系统的支持,是标准C++的一个扩展,它使Qt能更好地实现GUI图形用户界面编程。Qt的元对象系统不支持C++模板,尽管模板扩展了标准C++的功能,但是元对象系统提供了模板无法提供的一些特性。Qt的元对象系统基于三个事实:
(1)基类QObject:任何想使用元对象系统功能的类必须继承自QObject。
(2)Q_OBJECT宏:必须出现在类的私有声明区,以启动元对象的特性。
(3)元对象编译器(Meta-Object Complier,moc):为QObject子类实现元对象特性提供必要的代码实现。