Прослушивание подключенных сигналов Component.onCompleted и Component.onDestroyed из C ++ Q_OBJECT - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть C ++ Q_OBJECT (зарегистрированный с qmlRegisterType), который я хотел бы выполнить для некоторых действий с Component.onCompleted и Component.onDestroyed.

. Есть ли способ подписаться на эти обработчики?без написания QML?

Похоже, я мог бы использовать QQmlEnginePrivate::registerFinalizeCallback, но это зависело бы от частных заголовков.

1 Ответ

0 голосов
/ 28 декабря 2018

Это можно сделать с помощью 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.Может иметь смысл выполнить некоторую инициализацию в componentComplete, если она была создана из QML, но ничего не делать, если она была создана из c ++.

Что касается onDestroyed, вы можете подключить что-то к QObject::destroyed сигнал.Обратите внимание, что когда выдается destroyed, ваш объект является просто QObject, все деструкторы подклассов уже были вызваны.

...