收听来自 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.onCompletedComponent.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,所有子类的析构函数都已被调用。