BB10 で C++ コードから QML 関数を呼び出す方法は?
私のQML関数-
function loadingData(data) {
evaluateJavaScript("createChart('" + data + "')")
}
この「loadingData」関数を C++ から呼び出すにはどうすればよいでしょうか。
助けてください...
BB10 で C++ コードから QML 関数を呼び出す方法は?
私のQML関数-
function loadingData(data) {
evaluateJavaScript("createChart('" + data + "')")
}
この「loadingData」関数を C++ から呼び出すにはどうすればよいでしょうか。
助けてください...
まず、BB10 では明確ではありません。私が知っているのはデスクトップですが、方法はおそらく違いはありません。
双方向:
1) シグナルとスロット。http://qt-project.org/doc/qt-4.8/qtbinding.html#receiving-signalsを参照してください
2) メタオブジェクト
例 (qt 4.8):
C++ でオブジェクトを取得できるように、QML 要素に ID が必要です。
QDeclarativeView* mpView = //get view from whatever function
QObject *rootObject = mpView->rootObject(); //this is the rootObject of QML view
QObject *obj = rootObject->findChild<QObject *>(/*your element ID*/);
if (obj != NULL)
{
QVariant data = // what you need put in;
bool ret = QMetaObject::invokeMethod(obj, "loadingData",
Q_ARG(QVariant, data));
if (!ret) QDebug<<"invoke failure.";
}
C++ から QML 要素のプロパティに簡単にアクセスできますが、関数の呼び出しが難しくなります。
ただし、代わりに、c++ からシグナルを送信し、qml の関数を接続して、そこで必要なコードを通知して実行することができます。
C++ オブジェクトを QML に公開する
qmlDocument->setContextProperty("_someClass", someClass);
シグナルが定義されていると言うsomeSignal()
QML関数を呼び出す必要があるときはいつでも、emit someSignal()
emit someSignal()
QML では、関数を C++ シグナルに接続します
someClass.someSignal.connect(qmlFunction);
function qmlFunction() {
...
}
詳細情報はこちらでご覧いただけます。