簡體   English   中英

QQuickWidget將信號從C ++發送到QML中的插槽

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM