本文主要对QT中一些核心的特点进行简单的介绍。
元对象系统
元对象系统(Meta-Object System)提供了对象之间通信的信号与槽、运行时类型信息和动态属性系统。
主要有三部分组成:
QObject
类是所有使用元对象系统的类的基类。- 在类中声明
Q_OBJECT
宏,才能使用信号与槽、动态属性等元对象的特性。 MOC
(元对象编译器),对QT的代码进行预编译,之后再由C++编译器进行编译。该过程也会涉及到Q_OBJECT
宏。
对于 QObject
及其子类,可以使用 qobject_cast()
函数进行类型转换,类似C++中的 dynamic_static() 的下行转换。
QObject *obj = new QMyWidget;
//以下两种转换都是可以的,从基类到派生类的转换;
QWidget *widget = qobject_cast<QWidget*>(obj);
QWidget *mywidget = qobject_cast<QMyWidget*>(obj);
//下面的转换是失败的
QLabel *label = qobject_cast<QLabel*>(obj); //没有继承关系
属性系统
Q_PROPERTY(type name READ name WRITE setName NOTIFY nameChanged)
使用