为了节省代码,把精力放在技术本身上,我们直接复用上篇博客中的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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?