这里展示了c++加载qml文件的三种方式以及qml文件中根节点的访问

准备

在创建工程的初期,遇到了一个问题,cmake文件以前都是系统自动生成的,不需要我做过多的操作修改,但是,加载qml的程序主函数是需要用到QGuiApplication,qtcreater没法自动生成相关的项目,cmake得自己手搓了,呜呜呜,我是最烦手搓这玩意,东拼西凑搞半天,搞不好这个库没找到,那个库没找到,回头得系统的学一下这个了。。。。

#CMakeLists.txt
#最低版本号
cmake_minimum_required(VERSION 3.20)#项目名称
project(cmake_qml_cpp)
#自动寻找所需qt套件
find_package(Qt6 COMPONENTS Quick REQUIRED)set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)#添加到项目
add_executable(${PROJECT_NAME}main.cppsource.qrc
)#寻找到的套件要连接进来,不然会找不到一些库文件
target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Quick)

这是我写的cmake,导入的库是qt6的quick,其他版本要改哦

文件结构

qml程序是随便写的几个,因为要展示三种加载方式,先上运行效果图 

第一种方式:QQmlApplicationEngine

代码:

//第一种方式QQmlApplicationEngine//结合了QQmlEngine和QQmlComponent,这一步已经可以达到显示效果了QQmlApplicationEngine appeng("qrc:/qml/main.qml");//获取组件的根节点,就是qml程序的windowauto objs=appeng.rootObjects();auto win=static_cast<QQuickWindow*>(objs[0]);win->setX(0);win->setTitle("修改后的");

这种最简单,引擎直接加载,并且可以获取根节点来修改属性

第二种方式:QQuickView

代码:

QQuickView view;view.setSource(QUrl("qrc:/qml/2.qml"));view.setWidth(500);view.setHeight(500);view.show();

这种方式要注意qml中不可以有window作为根节点,他会自动创建一个的

第三种方式:QQmlEngine和QQmlComponent相结合

//第三种方式//qqmlengine和qqmlcomponent相结合QQmlEngine eng;QQmlComponent com(&eng);//加载qml内容,下面的是用loadurl的方式,还有一种是直接调用setdata,在里面直接上qml文本语言,我不习惯,就这样吧com.loadUrl(QUrl("qrc:/qml/3.qml"));if(com.isError()){qDebug()<<"com的错误:"<<com.errorString();}//创建对象,为了管理对象生命周期,将其先转换为window指针再交给智能指针管理std::unique_ptr<QQuickWindow>ct(static_cast<QQuickWindow*>(com.create()));ct->show();ct->setWidth(400);ct->setHeight(400);

这个就有点像自己纯手工搭建了,qqmlengine是引擎,一般component共用一个引擎,我这里使用load的方式加载,setdata是那种qml语言加上文本语言像\n什么的,不想搞,qml还有提词,获取错误就不说了,管理对象生命周期的问题,我是觉得应该有对象树系统管理比较好,这里使用智能指针管理,先创建对象,再强制转换程qquickwindow指针交给unique_ptr管理。

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

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

相关文章

007TG洞察:GPT-5前瞻与AI时代竞争力构建:技术挑战与落地路径

最近&#xff0c;GPT-5 即将发布的消息刷爆了科技圈&#xff0c;更让人期待的是&#xff0c;GPT-6 已经悄悄启动训练了&#xff0c;OpenAI 的奥特曼表示对未来1-2年的模型充满信心&#xff0c;预测AI将进化为能够发现新知识的“AI科学家”。面对日益强大的通用AI&#xff0c;企…

Windows下编译OpenVDB

本文记录在Windows下编译OpenVDB的流程。 零、环境 操作系统Windows 11VS Code1.92.1Git2.34.1MSYS2msys2-x86_64-20240507Visual StudioVisual Studio Community 2022CMake3.22.1 一、编译 1.1 下载 git clone https://github.com/AcademySoftwareFoundation/openvdb.git …

react 内置hooks 详细使用场景,使用案例

useState场景&#xff1a;组件中管理局部状态&#xff0c;如表单值、开关、计数器等。const [count, setCount] useState(0); return <button onClick{() > setCount(count 1)}>Click {count}</button>;useEffect 场景&#xff1a;组件挂载时执行副作用&#…

从0到1学Pandas(九):Pandas 高级数据结构与操作

目录一、探秘多级索引1.1 创建多级索引1.2 多级索引操作1.3 索引转换二、探索 Panel 与 xarray2.1 Panel 数据结构2.2 xarray 库2.3 高维数据操作三、时间序列高级应用3.1 时区处理3.2 时间序列重采样与频率转换3.3 时间序列分解与预测四、数据透视与重塑高级技巧4.1 复杂透视表…

C# 图像转换实战:Bitmap 转 BitmapSource 的 2 种方法

C# 图像转换实战:Bitmap 转 BitmapSource 的 2 种方法 引言 两种转换方法的完整实现 1. 基于GDI句柄的直接转换 (ToBitmapSourceFast) 2. 基于内存流的编码转换 (ToBitmapSourceSafe) 方法对比与选型指南 避坑指南 GDI句柄泄漏问题 图像显示不完整 多线程访问图像引发异常 不同…

Spring Boot 整合 Spring MVC:自动配置与扩展实践

Spring MVC 作为 Java Web 开发的核心框架&#xff0c;在传统 SSM 项目中需要大量 XML 配置&#xff08;如 DispatcherServlet、视图解析器等&#xff09;。而 Spring Boot 通过 "自动配置" 特性&#xff0c;简化了 Spring MVC 的整合过程&#xff0c;同时保留了灵活…

print(“\033[31m红\033[32m绿\033[34m蓝\033[0m默认色“)

可以让python的终端字体有着不一样的颜色。代码&#xff1a;print("\033[31m红\033[32m绿\033[34m蓝\033[0m默认色")效果&#xff1a;

LNMP-zblog分布式部署

一、准备3台主机&#xff08;rocky8&#xff09;下载相应服务[rootnginx ~]# yum install -y nginx nfs-utils[rootphp ~]# yum install -y nfs-utils php-mysqlnd php php-fpm[rootmysql ~]# yum install -y mysql-server二、挂载php端[rootphp ~]# vim /etc/exports [rootphp…

常见代码八股

1. 利用梯度下降法&#xff0c;计算二次函数yx^2x4的最小值 def target_function(x):return x ** 2 x 4def gradient(x):return 2*x 1x_init 10 x x_init steps 100 lr 0.1 for i in range(100):x x - lr*gradient(x)print(f"最小值 f(x) {target_function(x):.4f…

【深入底层】C++开发简历4+4技能描述6

简历书写 熟悉C的封装、继承、多态&#xff0c;STL常用容器&#xff0c;熟悉C11的Lambda表达式、智能指针等&#xff0c;熟悉C20协程语法&#xff0c;具有良好的编码习惯与文档能力。 回答思路 这里是基本上就是要全会&#xff0c;考察的问题也很固定&#xff0c;stl这块可以定…

forest远程调用注意事项

1、如果在项目中&#xff0c;同时依赖了其中多个框架&#xff0c;那么按 Fastjson2 > Fastjson > Jackson > Gson 这样的优先级来判断&#xff0c;Forest 会以优先级最高的框架作为 JSON 转换器。2、Forest 支持哪几种 JSON 框架&#xff1f;A: 支持 Jackson、Gson、F…

网络资源模板--基于Android Studio 实现的新闻App

目录 一、测试环境说明 二、项目简介 三、项目演示 四、部设计详情&#xff08;部分) 登录页 首页 五、项目源码 一、测试环境说明 电脑环境 Windows 11 编写语言 JAVA 开发软件 Android Studio (2020) 开发软件只要大于等于测试版本即可(近几年官网直接下载也可…

通过Location API精准获取位置信息并优化定位精度!

&#x1f44b; 你好&#xff0c;欢迎来到我的博客&#xff01;我是【菜鸟不学编程】    我是一个正在奋斗中的职场码农&#xff0c;步入职场多年&#xff0c;正在从“小码农”慢慢成长为有深度、有思考的技术人。在这条不断进阶的路上&#xff0c;我决定记录下自己的学习与成…

构建可扩展的状态系统:基于 ArkTS 的模块化状态管理设计与实现

摘要 在 HarmonyOS 的日常开发中&#xff0c;很多人都会遇到一个问题&#xff1a;多个页面之间的数据状态如何共享&#xff1f;尤其是在组件结构越来越复杂的场景下&#xff0c;如果还用传统方式来传值&#xff0c;不仅代码混乱&#xff0c;维护也很吃力。 为了解决这个问题&am…

重生之我在暑假学习微服务第二天《MybatisPlus-下篇》

本系列参考黑马程序员微服务课程&#xff0c;有兴趣的可以去查看相关视频&#xff0c;本系列内容采用渐进式方式讲解微服务核心概念与实践方法&#xff0c;每日更新确保知识点的连贯性。通过系统化学习路径帮助开发者掌握分布式系统构建的关键技术。读者可通过平台订阅功能获取…

系统整理Python的条件语句和常用方法

Python 的条件语句&#xff08;if 语句&#xff09;是控制程序流程的基础之一&#xff0c;结构清晰、语法简洁&#xff0c;非常适合初学者掌握。一、基本语法结构if 条件:执行代码块1 elif 条件2:执行代码块2 else:执行代码块3示例&#xff1a;score 85if score > 90:print…

记录个IAR程序下载后硬件复位不运行,必须断电复位才运行的问题

【问题测试】有个F407的跑马灯的例子&#xff0c;是MDK和IAR两个版本&#xff0c;MDK版本的例子下载并复位后可以正常看到LED闪烁&#xff0c;而IAR的例子下进去后&#xff0c;不会闪烁。使用TOOL的上位机内核寄存器监测工具测试发现&#xff0c;硬件复位后竟然还在调试状态&am…

观察者模式(Observer Pattern)和 发布-订阅模式(Publisher-Subscriber Pattern)

你对 观察者模式&#xff08;Observer Pattern&#xff09;和 发布-订阅模式&#xff08;Publisher-Subscriber Pattern&#xff09;的描述是非常准确的&#xff0c;并且阐明了它们的核心区别。为了帮助你更好地理解这两者的细微差异&#xff0c;下面是一个更详细的对比分析&am…

2025年接口技术的十字路口:当MCP遇见REST、GraphQL与gRPC

在当今这个由数据驱动、万物互联的时代&#xff0c;应用程序接口&#xff08;API&#xff09;已成为现代软件架构的基石。它们是不同服务之间沟通的桥梁&#xff0c;支撑着从网页应用到复杂的微服务生态系统的一切。长久以来&#xff0c;开发者们在REST、GraphQL和gRPC这几种主…

【CTF-WEB-反序列化】利用__toString魔术方法读取flag.php

题目 页面提示输入?code&#xff0c;那我们在网址里get一下出现了新页面的提示&#xff0c;进入看看下面有个help.php页面的提示&#xff0c;进入看看有一段php代码&#xff0c;仔细分析&#xff0c;应该是要用反序列法代码如下 class FileClass{ public $filename error.log…