0

BB10 で C++ コードから QML 関数を呼び出す方法は?

私のQML関数-

function loadingData(data) {
    evaluateJavaScript("createChart('" + data + "')")
}

この「loadingData」関数を C++ から呼び出すにはどうすればよいでしょうか。

助けてください...

4

2 に答える 2

2

まず、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.";  
} 
于 2013-10-11T08:34:04.800 に答える
1

C++ から QML 要素のプロパティに簡単にアクセスできますが、関数の呼び出しが難しくなります。

ただし、代わりに、c++ からシグナルを送信し、qml の関数を接続して、そこで必要なコードを通知して実行することができます。

C++ オブジェクトを QML に公開する

qmlDocument->setContextProperty("_someClass", someClass);

シグナルが定義されていると言うsomeSignal()

QML関数を呼び出す必要があるときはいつでも、emit someSignal()

emit someSignal()

QML では、関数を C++ シグナルに接続します

someClass.someSignal.connect(qmlFunction);

function qmlFunction() {
    ...
}

詳細情報はこちらでご覧いただけます

于 2013-09-10T09:51:06.683 に答える