为了节省代码,把精力放在技术本身上,我们直接复用上篇博客中的main.qml来演示
Qml代码
//main.qml
import QtQuick 2.13
import QtQuick.Window 2.13
//窗口节点
Window {
id: root
visible: true
width: 640
height: 480
title: "Qt Quick Demo"
IconButton {
anchors.fill: parent
anchors.margins: 100
icon: "images/1.png"
text: "Print Mouse Position"
}
}
//IconButton.qml
IconButtonForm {
id: _root
width: 640
height: 480
//点击信号
signal clicked(var mouse)
//点击事件
clickRect.onClicked: {
_root.clicked(mouse)
}
//监听属性变化
onWidthChanged: {
console.debug("IconButton width change")
}
//Qml方法
function sum(a, b) {
return a + b
}
}
C++将Qml加载为对象 C++可以通过QQmlComponent和QQuickView两种方式来获得Qml中的对象
//QQmlComponent
int main(int argc, char *argv[]) {
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
QQmlComponent component(&engine, "qrc:///main.qml"); //注意路径写法
QObject *object = component.create();
qdebug className(); //打印结果为:QQuickWindowQmlImpl
QQuickWindow *window = qobject_cast(object);
qdebug setProperty("width", 1000);
QQmlProperty(object, "width").read();
QQmlProperty(object, "width").write(1000);
return app.exec();
}
C++调用Qml对象方法
QQuickView view;
view.setSource(QUrl("qrc:///IconButton.qml"));
view.show();
QObject *object = view.rootObject();
QVariant returnValue;
QMetaObject::invokeMethod(object, "sum", Q_RETURN_ARG(QVariant, returnValue), Q_ARG(QVariant, 1), Q_ARG(QVariant, 2));
qdebug
关注
打赏