Q_CLASSINFO ( Name, Value ) //声明类信息
Q_DISABLE_COPY ( Class ) // 隐藏拷贝构造函数
Q_EMIT Q_SIGNALS Q_SLOTS //CONFIG += no_keywords,它告诉QT不要定义moc关键字signals,slots和emit,因为这些名字可能将被用于第三方库,例如Boost。你只需简单的用QT宏将他们替换为 Q_SIGNALS, Q_SLOTS,和 Q_EMIT,就可以继续使用信号槽.
Q_ENUMS ( ... ) ; //声明枚举型类对象
Q_FLAGS ( ... ) //声明一个flags 并指明可以指定的值
Q_INTERFACES ( ... ) //用于qt插件,该宏告诉qt
Q_DECLARE_INTERFACE(classname) ; //声明一个QObject_cast<classname*>模板函数
Q_EXPORT_PLUGIN2() pluginName 没有被使用 (看下一节静态插件来理解它的用途)
#define Q_EXPORT_PLUGIN2(pluginName, PluginClass) \
extern "C" PluginClass *qt_plugin_instance() { return new pluginClass; }
extern "C" const char *qt_plugin_verification_data() { return "pattern=QT_PLUGIN_VERIFICATION_DATA\nversion=4.5.3\ndebug=false\nbuildkey=x86_64 linux g++-4 full-config";
Q_IMPORT_PLUGIN2();创建一个插件并返回
Q_INVOKABLE // Q_INVOKABLE void invokableMethod(); 允许该函数通过metaobject系统调用,invokeMethod可以调用该类函数
例如 invokeMethod(pushButton, "animateClick",Qt::QueuedConnection,...);实现调用
Q_OBJECT ;//在类声明里必须包含该宏以便支持信号槽或其他元对象系统的服务
Q_PROPERTY ( ... ) ; //声明一个继承自QObject类的一个属性
Q_PROPERTY(type name //属性类型和名称
READ getFunction //读取函数
[WRITE setFunction] //写函数
[RESET resetFunction] //重置函数
[NOTIFY notifySignal] //值改变时通知
[DESIGNABLE bool] //属性能否在Qt Designer中编辑
[SCRIPTABLE bool] //能否在QScript中使用该属性
[STORED bool] //表明这是一直存在的
[USER bool] //是否可以被用户所编辑
[CONSTANT] //设定属性是不可修改的 所以不能跟WRITE或者NOTIFY同时出现
[FINAL]) //表明该属性不会被派生类中重写
例如:Q_PROPERTY(QString title READ title WRITE setTitle USER true),QVariant property(const char* name),void setProperty(const char* name,QVariant)可以读写属性