如何在创建对象时从 QML 调用任意 C++ 函数?
Posted
技术标签:
【中文标题】如何在创建对象时从 QML 调用任意 C++ 函数?【英文标题】:How to call arbitrary C++ functions from QML right at the object's creation? 【发布时间】:2019-02-18 03:59:29 【问题描述】:这是我的 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++ 代码,但没有看到如何立即调用它。
【问题讨论】:
【参考方案1】:对于这种情况,您可以使用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");
【讨论】:
以上是关于如何在创建对象时从 QML 调用任意 C++ 函数?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 QML 中访问 C++ 类对象,而不是在 QML 中创建单独的对象?