【问题标题】:How to call a QML function from c++ in BB10如何在 BB10 中从 c++ 调用 QML 函数
【发布时间】:2013-09-10 06:32:18
【问题描述】:

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

我的 QML 函数-

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

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

请帮忙...

【问题讨论】:

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


【解决方案1】:

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

两种方式:

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

2) 元对象

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

【讨论】:

    【解决方案2】:

    你可以很容易地从 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

    【讨论】:

      猜你喜欢
      • 2013-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-27
      相关资源
      最近更新 更多