元对象系统
元对象系统提供了信号与槽机制
1.QObject类,为objects提供了一个可以利用元对象系统的基类。
2.Q_OBJECT宏: 在类的私有部分声明这个宏可以启用元对象特性,例如:动态属性、信号与槽。
3.Meta-Object编译器(moc): 为每个QObject子类生成必要的代码来实现元对象特性。
moc工具会读取C++源文件,如果发现有包含Q_OBJECT宏的类声明,就生成另外一个包含这些类的元对象代码的C++源文件。生成的源文件要么在类源文件里用#include包含,或者(更常见)与类的实现代码直接进行编译连接。
QObject::metaObject()返回类关联的meta-object对象。
QMetaObject::className()在运行时以字符串的形式返回类名,无需C++编译器提供运行时类别信息(RTTI)的支持。
QObject::inherits()返回一个对象是否是QObject继承树上一个类的实例。
QObject::tr()和QObject::trUtf8()提供国际化支持,将字符串翻译成指定的语言。
QObject::setProperty()和QObject::property()通过名称动态设置和获取属性。
QMetaObject::newInstance()构造类的一个新实例。
qobject_cast()动态转换QObject类的类型。qobject_cast()函数和标准C++的dynamic_cast()功能类似
QObject *obj=new mywidget;
QWidget *wid=qobject_cast<QWidget *>(obj);
wid->setObjectName("widget");
mywidget *myw=qobject_cast<mywidget