在这里不外乎有四种方法:
- 暴露已存在的Qt C++对象给QML
- 注册Qt C++类类型给QML
- QML中的Signal Handler(相当于Qt C++发送信号给QML端,QML端的Signal Handler进行处理)。
1. 2. MyClass myObj;
engine.rootContext()->setContextProperty(“myObjectExposeByCXProperty”, &myObj );
- 在Qt C++端创建QML对象,既然对象都有了。那你想怎么样它就怎么样它呗。
-
前两种都很简单
1,暴露已存在的Qt C++对象给QML
- 注册Qt C++类类型给QMLqmlRegisterType(“RegisterMyType”, 1, 0, “MyClassType”);3 .QML中的Signal Handler(相当于Qt C++发送信号给QML端,QML端的Signal Handler进行处理)。先暴露给qml:

1. MyClass myObj;
engine.rootContext()->setContextProperty(“myObjectExposeByCXProperty”, &myObj );
qml中连接信号:
Connections
{
target: myObjectExposeByCXProperty
onMyStringChanged:textEdit.text= myObjectExposeByCXProperty.myString;
}
-
在Qt C++端创建QML对象,既然对象都有了。那你想怎么样它就怎么样它呗。
这相对比较难搞一点,弄不好久找不到这个qml对象。
1,新建一个MyItem.qml
import QtQuick 2.0
Item {
function myQmlFunction(msg) {
console.log("Got message:", msg)
return "some return value"
}
}
QQmlEngine *engine = new QQmlEngine;
QQmlComponent component(engine, QUrl(QStringLiteral(“qrc:/MyItem.qml”)));
qDebug()<<component.errors ();
QObject *myObject = component.create();
QVariant returnedValue;
QVariant msg = “Hello from C++”;
QMetaObject::invokeMethod(myObject, “myQmlFunction”,
Q_RETURN_ARG(QVariant, returnedValue),
Q_ARG(QVariant, msg));