如何在BB10中从c ++调用QML函数

时间:2013-09-10 06:32:18

标签: c++ qt blackberry-10 blackberry-cascades

如何从BB10中的c ++代码调用QML函数。?

我的QML功能 -

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

现在如何从c ++中调用这个“loadingData”函数。

请帮忙......

2 个答案:

答案 0 :(得分:2)

  

首先,不清楚BB10,我所知道的是在桌面上,但方法可能没什么区别;

     

双向:

     

1)信号和插槽;参考http://qt-project.org/doc/qt-4.8/qtbinding.html#receiving-signals

     

2)metaObject

     

例子(qt 4.8):

     

您需要在QML元素中使用ID,以便我们可以在C ++中获取对象:

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.";  
} 

答案 1 :(得分: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() {
    ...
}

您可以找到详细信息here