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

标签 c++ qt qml

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

关于c++ - 如何在对象创建时从 QML 调用任意 C++ 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54740289/

相关文章:

c++ - 将回调函数中的对象引用传递给 std::thread

c++ - Qt5 QtQuick 2.0(Qt Quick Application) 在一个窗口中切换 View (qml文件)

c++ - 尝试用 C++/Qt 制作插件系统

c++ - Qt QMetaData类名实现

c++ - 不允许最大化/显示 QML 中的应用程序

qt - 在QML(Qt)中读写文件

C++ 构造函数 undefined reference

c++ - 从 `const std::string` 隐式构造 `const char *` 是否有效?

c++ - 在这种情况下我可以重新使用指针吗?

qt - 在矩形内包装 ListView