[英]QQuickWidget send signal from c++ to slot in QML
我有一個應用程序,我想為其制作一些動畫。 我做了一個qml文件,並使用QQuickWidget打開並將其顯示在顯示器中。 現在我想在c ++和QML之間進行迭代。 我想,例如,當調用c ++中的函數時,顯示屏上有一個球移動。 但是我無法在c ++和qml之間建立連接。
歡迎任何幫助。
我的代碼的一小部分:c ++
QQuickWidget *quickWidget = new QQuickWidget;
quickWidget->setSource(QUrl("qrc:/QML/main.qml"));
auto rootObject = quickWidget->rootObject();
// Connect C++ signal to QML slot
connect(this, SIGNAL(cppSignal()), rootObject, SLOT(qmlSlot()));
emit cppSignal();
QML
Rectangle {
id: tela
visible: true
width: 715
height: 77
color: '#E8E8E8'
// NumberAnimation {
// running: true
// target: bolinha
// property: "x"
// duration: 1000
// to: 600
// }
function qmlSlot() {
bolinha.visible= enabled
animBolinha.start();
}
}
我該怎么解決?
我不確定是否可以像以前那樣從C ++代碼調用QML方法。
QT文檔中推薦的方法是:
所有QML方法都公開給元對象系統。 由於這些函數已公開給元對象系統,因此可以使用QMetaObject::invokeMethod()
來調用QML函數。
可能是您的情況,您應按以下方式致電(未經測試)。
auto rootObject = quickWidget->rootObject();
QMetaObject::invokeMethod(rootObject, "qmlSlot");
查看文檔 (搜索調用QML方法 )
如文檔中所述,您可以使用Q_ARG
傳遞參數,並使用Q_RETURN_ARG
接收返回參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.