Как вызвать произвольные функции C ++ из QML прямо при создании объекта? - PullRequest
0 голосов
/ 18 февраля 2019

Вот мой main.qml:

import QtQuick 2.0
import A 1.0

Item {

    width: 1280
    height: 720

    OpenGlVideoQtQuick {

    }
}

Вот часть OpenGlVideoQtQuick:

class OpenGlVideoQtQuick : public QQuickItem
{
    Q_OBJECT
    Q_PROPERTY(qreal t READ t WRITE setT NOTIFY tChanged)

public:
    OpenGlVideoQtQuick();

    qreal t() const { return m_t; }
    void setT(qreal t);
    Q_INVOKABLE void initRtspMedia(const QString &uri);
}

Как мне вызвать initRtspMedia() из QML прямо при создании OpenGlVideoQtQuick QML объект?Я только видел, как кнопки и другие вещи могут вызывать код C ++, но не как его вызвать немедленно.

1 Ответ

0 голосов
/ 18 февраля 2019

Для этого случая вы можете использовать Component.onCompleted :

import QtQuick 2.0
import A 1.0

Item {

    width: 1280
    height: 720

    OpenGlVideoQtQuick {
        id: opengl_video
        Component.onCompleted: opengl_video.initRtspMedia("some uri")
    }
}

Или из C ++ вы можете сделать это с помощью QQmlParserStatus :

class OpenGlVideoQtQuick : public QQuickItem, public QQmlParserStatus
{
    Q_OBJECT
    Q_PROPERTY(qreal t READ t WRITE setT NOTIFY tChanged)
    Q_INTERFACES(QQmlParserStatus)
public:
    OpenGlVideoQtQuick();

    qreal t() const { return m_t; }
    void setT(qreal t);
    Q_INVOKABLE void initRtspMedia(const QString &uri);

   void classBegin() {}
   void componentComplete() {
       initRtspMedia("some uri");
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...