如何在对象创建时从 QML 调用任意C++函数?

How to call arbitrary C++ functions from QML right at the object's creation?

本文关键字:任意 调用 C++ 函数 QML 对象 创建      更新时间:2023-10-16

这是我的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);
}

在创建OpenGlVideoQtQuick QML对象时,如何从QML调用initRtspMedia()?我只看过按钮和其他东西如何称呼C 代码,但不能立即调用它。

在这种情况下,您可以使用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");
   }
}