属性系统
Qt提供了一套类似于某些编译器供应商提供的复杂属性系统。然而,作为一个与编译器和平台无关的库,Qt 不依赖于非标准的编译器特性,比如 __property
或 [property]
。Qt 的解决方案可以在 Qt 支持的每个平台上与 任何 标准C++编译器一起使用。它基于元对象系统,该系统还通过信号和槽提供了对象间的通信。
声明属性的要求
声明属性需要在继承 QObject 的类中使用 Q_PROPERTY() 宏。
Q_PROPERTY(type name
(READ getFunction [WRITE setFunction] |
MEMBER memberName [(READ getFunction | WRITE setFunction)])
[RESET resetFunction]
[NOTIFY notifySignal]
[REVISION int]
[DESIGNABLE bool]
[SCRIPTABLE bool]
[STORED bool]
[USER bool]
[CONSTANT]
[FINAL]
[REQUIRED])
以下是一些典型的属性声明示例,取自 QWidget 类。
Q_PROPERTY(bool focus READ hasFocus)
Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)
Q_PROPERTY(QCursor cursor READ cursor WRITE setCursor RESET unsetCursor)
以下是一个示例,展示了如何使用 MEMBER
关键字将成员变量导出为 Qt 属性。请注意,必须指定 NOTIFY
信号以允许 QML 属性绑定。