收听来自 C++ Q_OBJECT 的附加 Component.onCompleted 和 Component.onDestroyed 信号
Listening to attached Component.onCompleted and Component.onDestroyed signals from C++ Q_OBJECT
我有一个 C++ Q_OBJECT
(在 qmlRegisterType
注册),我想对 Component.onCompleted
和 Component.onDestroyed
.
执行一些操作
有没有办法在不编写任何 QML 的情况下订阅这些处理程序?
看起来我可以使用 QQmlEnginePrivate::registerFinalizeCallback
,但这取决于私有 headers。
这可以通过 QQmlParserStatus
来完成
To use QQmlParserStatus, you must inherit both a QObject-derived class and QQmlParserStatus, and use the Q_INTERFACES() macro.
class MyObject : public QObject, public QQmlParserStatus
{
Q_OBJECT
Q_INTERFACES(QQmlParserStatus)
public:
MyObject(QObject *parent = 0);
...
void classBegin() override;
void componentComplete() override;
}
classBegin
可用于标记实例已从 QML 创建。如果它是从 QML 创建的,那么在 componentComplete
中进行一些初始化是有意义的,但如果它是从 C++ 创建的,则什么也不做。
至于onDestroyed,你可以连接一些东西到QObject::destroyed
信号。
请注意,当发出 destroyed
时,您的对象只是一个 QObject
,所有子类的析构函数都已被调用。
我有一个 C++ Q_OBJECT
(在 qmlRegisterType
注册),我想对 Component.onCompleted
和 Component.onDestroyed
.
有没有办法在不编写任何 QML 的情况下订阅这些处理程序?
看起来我可以使用 QQmlEnginePrivate::registerFinalizeCallback
,但这取决于私有 headers。
这可以通过 QQmlParserStatus
To use QQmlParserStatus, you must inherit both a QObject-derived class and QQmlParserStatus, and use the Q_INTERFACES() macro.
class MyObject : public QObject, public QQmlParserStatus
{
Q_OBJECT
Q_INTERFACES(QQmlParserStatus)
public:
MyObject(QObject *parent = 0);
...
void classBegin() override;
void componentComplete() override;
}
classBegin
可用于标记实例已从 QML 创建。如果它是从 QML 创建的,那么在 componentComplete
中进行一些初始化是有意义的,但如果它是从 C++ 创建的,则什么也不做。
至于onDestroyed,你可以连接一些东西到QObject::destroyed
信号。
请注意,当发出 destroyed
时,您的对象只是一个 QObject
,所有子类的析构函数都已被调用。