2017-09-18 18 views
0

私はアプリケーションを持っていますので、少しアニメーションを作りたいと思います。 私はqmlファイルを作成し、QQuickWidgetを使用してそれを開いて表示しました。今、私はC++とQMLの間で反復をしたいと思っています。たとえば、C++の関数が呼び出されると、ボールがディスプレイに表示されます。しかし、私はC++とqmlの間の接続を作ることができませんでした。QQuickWidgetはQ ++のスロットにC++からシグナルを送ります

すべての援助を歓迎します。

私のコードの小さな一部: 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

私はそれを解決するために何ができますか?

答えて

0

C++コードからQMLメソッドを呼び出せるかどうかはわかりません。 QTドキュメントから

推奨される方法は次のとおりです。

すべてQML方法はメタオブジェクトシステムにさらされています。関数がメタオブジェクト・システムに公開されているので、QMetaObject::invokeMethod()を使用してQML関数を呼び出すことができます。

おそらくあなたの場合、以下のように電話する必要があります(テストされていません)。

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

ルックdocumentation呼び出しQML方法を検索)

としては、あなたが戻り引数を受け取るための引数とQ_RETURN_ARGを渡すためにQ_ARGを使用することができ、文書の中で述べています。

関連する問題