我正在使用BB Native SDK开发Blackberry 10移动应用程序。
我需要将QML函数调用到我的C ++类中。我对此进行了大量搜索,但我发现有可能将C ++称为QML而不是逆向。您可以查看:QML and C++ integration
有人可以帮我吗?
这是QML代码,指定我需要调用的函数,在我的mapview中添加一个标记:
Container {
id: pinContainer
objectName: "pinContObject"
...
function addPin(lat, lon, name, address) {
var marker = pin.createObject();
marker.lat = lat;
marker.lon = lon;
...
}
}
答案 0 :(得分:10)
这是什么信号和插槽。 您可以使用QML连接将任意信号连接到QML中的任意插槽。
http://qt-project.org/doc/qt-4.8/qml-connections.html
Container {
id: pinContainer
objectName: "pinContObject"
...
function addPin(lat, lon, name, address) {
var marker = pin.createObject();
marker.lat = lat;
marker.lon = lon;
...
}
Connections {
target: backend
onDoAddPin: {
addPin(latitude, longitude,name, address)
}
}
}
在C ++后端,你所要做的就是
class Backend: public QObject {
signals:
void doAddPin(float latitude, float longitude, QString name, QString address);
........
void callAddPinInQML(){
emit doAddPin( 12.34, 45.67, "hello", "world");
}
}
答案 1 :(得分:5)
MyItem.qml
import QtQuick 2.0
Item {
function myQmlFunction(msg) {
console.log("Got message:", msg)
return "some return value"
}
}
的main.cpp
QQmlEngine engine;
QQmlComponent component(&engine, "MyItem.qml");
QObject *object = component.create();
QVariant returnedValue;
QVariant msg = "Hello from C++";
QMetaObject::invokeMethod(object, "myQmlFunction",
Q_RETURN_ARG(QVariant, returnedValue),
Q_ARG(QVariant, msg));
qDebug() << "QML function returned:" << returnedValue.toString();
delete object;
这应该有效。在这里,我从我的C ++类调用QML函数。
答案 2 :(得分:1)
来自Qt文档:
http://qt-project.org/doc/qt-5/qtqml-cppintegration-interactqmlfromcpp.html#invoking-qml-methods
调用QMetaObject::invokeMethod
一个将调用正确的插槽,无论它是用C ++还是QML定义的。