由于项目原因,最近要进行qml相关开发,我之前也没有搞过qml,因此开一个qml系列的专栏,记录自己关于qml的相关学习

新建第一个qml工程

按如下图所示方法新建一个最简单的qml工程:

编译运行

可以看到是一个标题为“hello word”没有任何内容的空白窗体。

代码解析

main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>int main(int argc, char *argv[])
{
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endifQGuiApplication app(argc, argv);QQmlApplicationEngine engine;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();
}

可以看到与传统QWidget工程相比关键不同的是这一部分:

    QQmlApplicationEngine engine;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);

如果是QWidget工程这里一般是声明一个窗体比如QWidget然后show()显示。这里有一个很关键的QQmlApplicationEngine类,QML中最关键的也是这个QQmlApplicationEngine

QQmlApplicationEngine 的核心作用

这段代码是 Qt Quick 应用程序的入口核心,与传统QWidget w,w.show()有本质区别。QQmlApplicationEngine负责加载 QML 文件并构建完整的应用程序对象树。比如上面代码engine.load(url)。这是一个QML引擎。

QML 引擎初始化流程

  1. 引擎实例化
    QQmlApplicationEngine engine; 创建 QML 引擎,负责解析 QML 文件、管理组件生命周期和绑定 JavaScript 上下文。

  2. QML 资源定位
    const QUrl url(QStringLiteral("qrc:/main.qml"))指定 QML 入口文件路径。qrc表示从 Qt 资源系统加载,避免文件路径依赖问题。

  3. 对象创建回调
    绑定引擎的信号,用于检测根组件是否成功加载。若失败(!obj 且 URL 匹配),则强制退出应用。

  4. 启动 QML 渲染
    前面都是准备工作,最后关键一步engine.load(url)最终触发 QML 文件的解析和渲染,生成可视化界面。

main.qml

import QtQuick 2.15
import QtQuick.Window 2.15Window {width: 640height: 480visible: truetitle: qsTr("Hello World")
}
  • QtQuick 2.15:导入基础 Qt Quick 模块,包含创建 UI 所需的核心类型
  • QtQuick.Window 2.15:提供窗口管理功能,包含 Window 类型

这里就有一个疑问为什么是2.15,别的行不行?

QtQuick 和 QtQuick.Window 的版本号(如2.15)与Qt框架的版本发布周期相关。每个Qt版本会包含对应的Qt Quick模块更新,版本号反映了模块的兼容性和功能集。所以版本号并非随意选择,而是与Qt发行版中稳定的模块版本一致。例如我使用的Qt版本是5.15.2。Qt 5.15.2中Qt Quick模块的API版本为2.15。

然后下面部分就是定义了一个宽为640px,高为480px并且初始可见,标题为Hello World的window对象。

这里明显就可以看出与传统QWidget开发代码的不同,QWidget 通过代码显式创建控件(命令式),而 QML 通过描述式语言定义界面(声明式),由引擎动态生成对象。并且QWidget 直接操作原生窗口对象,QML 引擎则维护独立的场景图(Scene Graph),通过渲染线程优化性能。

以上就是关于新建的第一个qml工程的代码解析,后续会进一步更新其他相关qml内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96991.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96991.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/96991.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Coze源码分析-资源库-创建知识库-基础设施/存储/安全

6. 基础设施层 基础设施层为知识库创建功能提供底层技术支撑&#xff0c;包括数据存储、缓存、消息队列、文档处理、向量化等核心服务。 6.1 数据存储服务 6.1.1 MySQL数据库 文件位置: backend/infra/rdb/mysql.go // MySQLConfig MySQL配置 type MySQLConfig struct {Host …

【iOS】设计模式复习

目录 观察者模式 通知机制 基本使用 注册观察者 创建一个通知 发送通知 通知与多线程 使用异步发送通知 NSNotificationQueue通知队列 在子线程中运行观察者函数 实现原理 named表 nameless表 wildcard表 添加观察者 发送通知 移除通知​ KVO机制 基本使用 …

RK3568 NPU :RKNN-ToolKit2环境搭建

1. 安装Miniconda3 下载 Linux 64 位 Miniconda 最新版安装脚本 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh安装 Miniconda bash Miniconda3-latest-Linux-x86_64.sh -u安装完成后会自动设置环境变量。打开新的终端&#xff0c;发现用户名前…

Ubuntu 24.04 Server 版系统安装及配置

Ubuntu 24.04 Server 版安装及配置 文章目录Ubuntu 24.04 Server 版安装及配置一、获取安装文件二、虚拟机配置三、安装界面四、配置网络五、扩容根分区 一、获取安装文件二、虚拟机配置三、安装界面 选择English&#xff08;US&#xff09;问是否升级内核配置键盘手动配置ipv4…

Java 事务失效场景全解析

在 Java 开发中&#xff0c;事务管理是保证数据一致性的核心机制&#xff0c;尤其是在 Spring 框架中&#xff0c;Transactional注解的使用极大简化了事务配置。然而&#xff0c;在实际开发中&#xff0c;事务常常会因为一些细节问题而失效&#xff0c;导致数据异常。本文将详细…

【Coze搞钱实战】14. 抖音直播间自动回复机器人实战教程:三小时搭建智能客服,互动率提升150%(保姆级无代码指南)

摘要:抖音直播间高频问题重复回复、观众互动不及时是运营痛点。本文针对新手和进阶用户,提供无代码的自动回复机器人搭建方案:新手1小时完成基础配置(Coze+抖音对接),进阶用户通过促销倒计时、粉丝分层、热点借势三大策略提升互动率150%。方案基于某女装直播间实测数据(…

云计算核心知识梳理

云计算作为新一代信息技术的核心,其体系涵盖特点、定义、技术演进及分类等多个维度,以下是对相关知识的系统整合与解读。 一、云计算的核心特点 / 优势 云计算的优势围绕资源利用效率、服务灵活性和管理便捷性展开,具体可拆解为五大核心特性: 按需自助服务:用户无需人工干…

安卓13_ROM修改定制化-----安卓 13 系统 ROM 定制化与低版本系统的核心区别

安卓系统凭借其全球领先的市场占有率,开放特性为厂商和开发者提供了深度定制的空间,形成了丰富的ROM生态圈。从最初的安卓1.0到最新的安卓15,系统在功能、性能和安全方面不断迭代升级,同时也为ROM定制带来了新的机遇与挑战。特别是从安卓11开始,谷歌对系统架构和安全机制进…

【Java后端】Spring Boot 2.7.x 和 Swagger 3.0.x (springfox 3.x) 的兼容性问题

springfox 在 Spring Boot 2.6 开始就有很多兼容性 bug&#xff08;主要是 Spring MVC PathPatternParser 的引入&#xff09;&#xff0c;导致在 Spring Boot 2.6/2.7 里经常出现 无法启动 / 无法访问 swagger-ui.html 的情况。&#x1f50e; 问题原因Spring Boot 2.6 开始默认…

Vue3+ts使用oidc-client-ts

配置 OIDC 客户端 在项目中创建 authOptions 对象&#xff0c;定义 OIDC 认证所需的配置项&#xff1a; export const authOptions {authority: https://xxxxxxxxx/UserCenter, // 认证服务器 URLclient_id: xxxx, // 客户端 IDredirect_uri: http://localhost:3000/callbac…

从 “数据中转站“ 到 “边缘智能中枢“:区域网关的技术突围与开发范式重构

在物联网架构中,区域网关长期被视为 "边缘与云端的桥梁"—— 负责协议转换、数据转发、设备接入等基础功能。但随着边缘计算兴起与 AI 模型轻量化,区域网关正经历从 "被动转发" 到 "主动决策" 的范式跃迁。 本文将从开发视角拆解区域网关的三大…

Django全栈班v1.04 Python基础语法 20250913 早上

print 函数基本用法 print函数会自加换行符&#xff0c;一个print&#xff0c;会打印一行输出。 print("第一行") print("第二行") print("第三行")输出结果&#xff1a;print 输出多个值 一个print可以同时输出多个值&#xff0c;这多个值会在一…

面试鸭Java八股之Kafka

Kafka是什么&#xff1f;它的主要应用场景有哪些? Kafka是一种分布式流事件处理平台&#xff0c;最初由 LinkedIn 开发&#xff0c;现在是 Apache 基金会的一部分。它的核心功能主要包括消息队列、流处理和数据集成。Kafka以高吞吐量、低延迟、可扩展和高容错性著称。 Kafka…

ARM32平台Bus Error深度排查:从调用栈到硬件原理的完整拆解

ARM32平台Bus Error深度排查&#xff1a;从调用栈到硬件原理的完整拆解 在嵌入式开发中&#xff0c;Bus Error&#xff08;信号7&#xff09;是个容易让人头疼的问题——它不像SIGSEGV&#xff08;段错误&#xff09;那样直观&#xff0c;常与硬件内存布局、指针破坏等底层问题…

适合工业用的笔记本电脑

在工业领域&#xff0c;生产环境往往复杂多变&#xff0c;从高温、高湿的车间&#xff0c;到布满粉尘的矿山&#xff0c;再到震动频繁的施工现场&#xff0c;普通的笔记本电脑很难在这样的环境中稳定运行&#xff0c;而工业用笔记本电脑的诞生&#xff0c;完美地解决了这一难题…

在LINUX中常见的文件系统类型

常见文件系统类型对比表文件系统类型作用和特点主要使用场景优缺点ext4Linux标准文件系统&#xff0c;日志式&#xff0c;支持大文件和分区Linux根文件系统、/home、/var等主要分区优点&#xff1a;稳定成熟&#xff0c;支持大文件(16TB)&#xff0c;日志功能保证数据安全&…

Unity核心概念⑥:Time

一、Time的主要用途主要用于游戏中参与位移、记时、时间暂停等。二、时间缩放比例1.时间停止&#xff1a;Time.timeScale 0;2.回复正常&#xff1a;Time.timeScale 1;3.二倍速&#xff1a;Time.timeScale 2;三、帧间隔时间帧间隔时间是指最近的一帧用了多少时间。1.用途主要…

Node.js 模块化规范详解

在 Node.js 中&#xff0c;模块化是开发应用程序的核心概念&#xff0c;它使得代码可以按照功能模块进行分割&#xff0c;易于维护、复用和扩展。Node.js 支持两种模块化规范&#xff1a;CommonJS&#xff08;CJS&#xff09;&#xff1a;这是 Node.js 最初使用的模块化规范。E…

前端网络性能优化实践:从 HTTP 请求到 HTTPS 与 HTTP/2 升级

在前端性能优化体系中&#xff0c;服务端与网络层的优化是提升用户体验的关键环节。本文将围绕 HTTP 请求优化、Cookie 管理、服务器缓存配置、gzip 压缩、HTTPS 部署及 HTTP/2 升级等核心内容&#xff0c;系统拆解优化策略与实施方法&#xff0c;为团队技术分享提供完整的知识…

[数据结构——lesson8.树]

目录 引言 学习目标 1.树的概念及结构 1.1树的定义 1.2树的基本概念 1.3 树的表示 (1)双亲表示法 (2)孩子表示法 (3)左孩子右兄弟表示法 1.4 树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 结束语&#xff1a; 引言 之前我们学习了栈和队列数…