若该文为原创文章,转载请注明原文出处
本篇内容只是基础部分,那QML和C++是如何交互的呢?
在实际应用过程中,C++部分采集数据,需要在QML端展示,那就需要数据的交互。
我们过通C++端控制QML数据,来实现实时显示的效果。
一、概念解释
全局对象或上下文对象,类型于全局变量,那在QML文件中就可以直接访问。
如何调用:
在engine中提供了相应的接口:
定义SCREEN_WIDTH的全局对象,这个对象所有的QML都是可以访问的。
QQmlContext *context = engine.rootComtext();
context->setContextProperty("SCREEN_WIDTH", 200);
二、例子
这个例子相对简单,只需要在main.cpp中定义全局对象,在QML中调用就可以。
1、文件修改
修改main.cpp文件:
/* main.cpp */
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
app.setOrganizationName("myApp");
QQmlApplicationEngine engine;
/* 全局对象、 上下文对象 */
QQmlContext *context = engine.rootContext();
context->setContextProperty("SCREEN_WIDTH", 400);
const QUrl url(QStringLiteral("qrc:/main.qml"));
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
&app, [url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
}, Qt::QueuedConnection);
engine.load(url);
return app.exec();
}
修改main.qml文件:
/* main.qml */
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12
Window {
id: window
visible: true
width: SCREEN_WIDTH /* 全局访问,在main.cpp中定义 */
height: 480
title: qsTr("Hello World")
}
2、结果
输出的窗口大小被修改为400*480
三、总结
例子只是简单的全局对象交互,QML访问C++的全局对象,C++和QML的交互知识太多太杂,还得在继续学习。
如有侵权,请及时联系博主删除,VX:18750903063