我有一个C ++ Q_OBJECT
(已向qmlRegisterType
注册),我想对Component.onCompleted
和Component.onDestroyed
执行一些操作。
是否有一种无需编写任何QML即可订阅这些处理程序的方法?
看起来我可以使用QQmlEnginePrivate::registerFinalizeCallback
,但这取决于私有标头。
答案 0 :(得分:1)
这可以通过QQmlParserStatus
要使用QQmlParserStatus,必须同时继承QObject派生的类和QQmlParserStatus,并使用Q_INTERFACES()宏。
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
,所有子类的析构函数都已被调用。