在這裡不外乎有四種方法:
- 暴露已存在的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));