如何从 BB10 中的 c++ 代码调用 QML 函数。?
我的 QML 函数-
function loadingData(data) {
evaluateJavaScript("createChart('" + data + "')")
}
现在我如何从 C++ 调用这个“loadingData”函数。
请帮忙...
如何从 BB10 中的 c++ 代码调用 QML 函数。?
我的 QML 函数-
function loadingData(data) {
evaluateJavaScript("createChart('" + data + "')")
}
现在我如何从 C++ 调用这个“loadingData”函数。
请帮忙...
首先,在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.";
}
您可以从 C++ 轻松访问 QML 元素的属性,但调用函数会很困难。
但是,您可以从 c++ 发出信号并连接 qml 中的函数以发出信号并在那里执行所需的代码。
将 C++ 对象公开给 QML
qmlDocument->setContextProperty("_someClass", someClass);
有信号定义的说someSignal()
当您需要调用 QML 函数时,emit someSignal()
emit someSignal()
在 QML 中将函数连接到 C++ 信号
someClass.someSignal.connect(qmlFunction);
function qmlFunction() {
...
}
您可以在此处找到详细信息。