侦听来自C ++ Q_OBJECT的附加Component.onCompleted和Component.onDestroyed信号

时间:2018-12-27 17:48:54

标签: c++ qt qml qt-signals

我有一个C ++ Q_OBJECT(已向qmlRegisterType注册),我想对Component.onCompletedComponent.onDestroyed执行一些操作。

是否有一种无需编写任何QML即可订阅这些处理程序的方法?

看起来我可以使用QQmlEnginePrivate::registerFinalizeCallback,但这取决于私有标头。

1 个答案:

答案 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,所有子类的析构函数都已被调用。