2017-09-18 1 views
0

Ich habe eine Anwendung, und ich möchte eine kleine Animation dafür machen. Ich habe eine QML-Datei erstellt und mit QQuickWidget geöffnet und in meinem Display angezeigt. Jetzt möchte ich Iteration zwischen C++ und QML machen. Ich möchte zum Beispiel, wenn eine Funktion in C++ aufgerufen wird, eine Kugel in meinem Display bewegen. Aber ich konnte keine Verbindung zwischen C++ und Qml herstellen.QQuickWidget senden Signal von C++ zu Steckplatz in QML

Jede Hilfe ist willkommen.

Ein kleiner Teil meines Code: 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(); 
    } 
} 

enter image description here

Was ich, es zu lösen tun kann?

Antwort

0

Ich bin nicht sicher, ob Sie eine QML-Methode aus C++ - Code wie Sie aufrufen können.

Der empfohlene Weg von QT-Dokumentation ist:

All QML Methoden ausgesetzt werden das Metaobjekt-System. Da die Funktionen einem Meta-Objekt-System ausgesetzt sind, können Sie QMetaObject::invokeMethod() verwenden, um die QML-Funktion aufzurufen.

Wahrscheinlich in Ihrem Fall sollten Sie wie unten erwähnt anrufen (nicht getestet).

auto rootObject = quickWidget->rootObject(); 
QMetaObject::invokeMethod(rootObject, "qmlSlot"); 

Blick documentation (Suche nach Hervorrufen von QML Methoden)

Wie gesagt in der Dokumentation, Sie Q_ARG verwenden können, die Argumente und Q_RETURN_ARG zur Aufnahme Rückkehr Argumente zu übergeben.

Verwandte Themen