【Qt】qt常用控件之QIcon 以及 qrc机制设置图片路径(QtCreator)

文章目录

  • 1. QIcon / windowIcon
  • 2. setIcon() 与 setwindowIcon()
    • 2.1 setIcon() 介绍与使用
    • 2.2 setWindowIcon 介绍与使用
  • 3. 路径问题 & qrc机制的引入
    • 3.1 绝对路径 / 相对路径 的问题
    • 3.2 qrc机制
    • 3.3 在QtCreator下利用qrc机制引入图片

1. QIcon / windowIcon

QIcon

  • QIcon 是Qt 框架中的一个类,用于表示图标。它可以加载各种格式的图像文件,并用于在 Qt 应用程序中显示图标。

  • 使用 QIcon 类,可以将图标设置为窗口标题栏、工具栏按钮、菜单项等控件的图标

windowIcon

windowIcon,即应用程序 窗口的图标,有以下两接口:

API说明
windowIcon()获取控件的图标,并返回QIcon对象
setWIndowIcon()设置控件的窗口图标

2. setIcon() 与 setwindowIcon()

2.1 setIcon() 介绍与使用

  • setIcon() 是用于 设置窗口部件(如按钮、标签等)的图标。它可以将一个 QIcon 对象设置为窗口部件的图标,用于在界面中显示该部件的图标。

示例:

在下面的例子中,我们将下面的图标设置到按钮上:

在这里插入图片描述

QPushButton *button = new QPushButton(this);
QIcon icon("D:\\Coder\\pictures\\icons\\camera");
button->move(100, 100);
button->setIcon(icon);

在这里插入图片描述

通过 setIcon() 设置的图标将会显示在指定的窗口部件上。


2.2 setWindowIcon 介绍与使用

  • setWindowIcon() 是用于 设置顶级窗口(如主窗口、对话框等)的图标。它可以将一个 QIcon 对象设置为顶级窗口的图标,用于在窗口的标题栏、任务栏等位置显示该图标。

示例:

QMainWindow *window = new QMainWindow(this);
QIcon icon("D:\\Coder\\pictures\\icons\\camera");
window->setWindowIcon(icon);
window->show();

在这里插入图片描述

通过 setWindowIcon() 设置的图标将会显示在窗口的标题栏、任务栏等位置。


3. 路径问题 & qrc机制的引入

3.1 绝对路径 / 相对路径 的问题

首先简单提一点:

  • 图标文件路径应该是正确的,否则图标可能无法加载。图标文件路径,我们有两种选择:
  • 使用转义符号\\正斜杠/来表示路径分隔符,因为反斜杠可能被解释为转义字符

对于上面举的两例:

  • 我们所使用的路径是绝对路径,即开发机上的路径。
  • 而程序最终要打包给用户使用,绝对路径显然是没法正确将图片设置出来。
  • 而优于绝对路径,我们可以选用相对路径,如果将图片放到程序根目录或子目录中,使用时直接搜索,但依然面临问题,如果用户无意把图片删掉,那么程序最终执行依然会缺少相应资源。
  • 此时我们引入qrc机制

3.2 qrc机制

概念

  • 首先,qrc机制可以确保不会出现上述的两个问题,可以确保:
    1. 图片所在的路径一定会在用户机器存在。
    2. 片不会被用户删掉。
  • qrc机制 用于将资源文件嵌入到应用程序中
    • 通过使用qrc机制,开发人员可以将图像、字体、样式表和其他资源文件作为二进制数据打包到应用程序中,而无需将它们作为外部文件进行管理。

原理

  1. QRC机制使用特殊的URL格式来引用资源文件。所有资源文件的路径都是相对于QRC文件本身的。

  2. 给Qt项目 引入一个xml文件(以.qrc为后缀),将要使用的资源文件导入到xml文件中并记录

  3. Qt在项目编译时,会根据qrc中的图片信息,提取图片的二进制信息,并将二进制数据转换为代码,最终写入到exe中

缺点

  • qrc机制的缺点:无法导入过大的资源文件

3.3 在QtCreator下利用qrc机制引入图片

我们在当前Qt项目中 添加Qt资源文件,如下图所示:

在这里插入图片描述

首先添加前缀(即文件路径),随后在所添加的qrc文件中添加文件:

在这里插入图片描述

需要注意的是,添加的资源文件一定要在res.qrc文件的同级目录或子目录。

添加图片后,如下:

在这里插入图片描述
此时我们执行下面的代码,会有如下结果:

在这里插入图片描述

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

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

相关文章

《SQLi-Labs》05. Less 29~37

title: 《SQLi-Labs》05. Less 29~37 date: 2024-01-17 22:49:10 updated: 2024-02-12 18:09:10 categories: WriteUp:Security-Lab excerpt: HTTP 参数污染,联合注入、宽字节注入。 comments: false tags: top_image: /images/backimg/SunsetClimbing.p…

限制资源使用

限制资源使用 您需要显示对服务器资源的访问来保护Web应用程序和应用程序数据不受未授权用户的访问。在Java EE Web应用程序中,您可以通过在应用服务器中创建用户和用户组来保护资源免受未经授权的访问。您可以为应用程序定义角色并在部署过程中将角色分配给用户。 1. 创建授权…

Zig、C、Rust的Pk1

Zig、C、Rust的Pk1 github.com上看到“A basic comparitive analysis of C, C, Rust, and Zig.”:https://github.com/CoalNova/BasicCompare/tree/main 里边的代码是9个月之前的,用现在的zig 0.11.0 及0.12-dev都无法通过编译(具体为:zig-w…

Decian 12.x基于LNMP安装phpIPAM(IP管理系统)

phpipam是一个开源Web IP地址管理应用程序(IPAM)。其目标是提供轻便,且有用的IP地址管理系统。它是基于PHP的应用程序,具有MySQL数据库后端,使用jQuery库,ajax和HTML5 / CSS3功能。 在Debian 12中&…

React18原理: 渲染与更新时的重点关注事项

概述 react 在渲染过程中要做很多事情,所以不可能直接通过初始元素直接渲染还需要一个东西,就是虚拟节点,暂不涉及React Fiber的概念,将vDom树和Fiber 树统称为虚拟节点有了初始元素后,React 就会根据初始元素和其他可…

1 月 Web3 游戏行业概览:市场实现空前增长

作者:lesleyfootprint.network 今年一月,区块链游戏领域迎来了爆发式增长,活跃用户的数量大幅提升。 区块链游戏不断融合 AI 技术,旨在提升玩家体验并扩大其服务范围,公链与游戏的兼容性问题也日渐受到重视。技术革新…

three.js 细一万倍教程 从入门到精通(一)

目录 一、three.js开发环境搭建 1.1、使用parcel搭建开发环境 1.2、使用three.js渲染第一个场景和物体 1.3、轨道控制器查看物体 二、three.js辅助设置 2.1、添加坐标轴辅助器 2.2、设置物体移动 2.3、物体的缩放与旋转 缩放 旋转 2.4、应用requestAnimationFrame …

MySQL篇----第二十篇

系列文章目录 文章目录 系列文章目录前言一、NULL 是什么意思二、主键、外键和索引的区别?三、你可以用什么来确保表格里的字段只接受特定范围里的值?四、说说对 SQL 语句优化有哪些方法?(选择几条)前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍…

正则可视化工具:学习和编写正则表达式的利器

引言 正则表达式是一种强大的文本匹配和处理工具,但对于初学者和非专业开发者来说,编写和理解正则表达式可能是一项具有挑战性的任务。为了帮助人们更好地学习和编写正则表达式,正则可视化工具应运而生。本文将探讨正则可视化工具的优点&…

使用python绘制可视化的欧拉公式三维曲线图

欧拉公式应用非常广泛,它在研究交流电、信号分析、量子力学、极坐标切换、求反常积分以及研究任何圆周运动等方面都有着重要的应用,它建立了复数、自然对数、圆周率等重要数学常量之间的关系,描述了复数在极坐标和笛卡尔坐标之间的转换。公式…

4核8g服务器能支持多少人访问?2024新版测评

腾讯云轻量4核8G12M轻量应用服务器支持多少人同时在线?通用型-4核8G-180G-2000G,2000GB月流量,系统盘为180GB SSD盘,12M公网带宽,下载速度峰值为1536KB/s,即1.5M/秒,假设网站内页平均大小为60KB…

用Python来实现2024年春晚刘谦魔术

简介 这是新春的第一篇,今天早上睡到了自然醒,打开手机刷视频就被刘谦的魔术所吸引,忍不住用编程去模拟一下这个过程。 首先,声明的一点,大年初一不学习,所以这其中涉及的数学原理约瑟夫环大家可以找找其…

【CSS】margin塌陷和margin合并及其解决方案

【CSS】margin塌陷和margin合并及其解决方案 一、解决margin塌陷的问题二、避免外边距margin重叠(margin合并) 一、解决margin塌陷的问题 问题:当父元素包裹着一个子元素且父元素没有边框的时候,当给子元素设置margin-top:100px&…

Go+:一种简单而强大的编程语言

Go是一种简单而强大的编程语言,它是在Go语言之上构建的,旨在提供更加强大、灵活和易于使用的编程体验。Go与Go语言共享大部分语法和语义,因此Go开发人员可以很快上手Go,同时也可以使用Go来编写更加简洁和高效的代码。在本文中&…

【程序设计竞赛】C++与Java的细节优化

必须强调下,以下的任意一种优化,都应该是在本身采用的算法没有任何问题情况下的“锦上添花”,而不是“雪中送炭”。 如果下面的说法存在误导,请专业大佬评论指正 读写优化 C读写优化——解除流绑定 在ACM里,经常出现…

中科大计网学习记录笔记(十):P2P 应用

前言: 学习视频:中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程 该视频是B站非常著名的计网学习视频,但相信很多朋友和我一样在听完前面的部分发现信…

【Java面试】数据类型常见面试题

什么是包装类型 将基本类型包装进了对象中得到的类型 基本类型和包装类型有什么区别 用途不同:基本类型一般用于局部变量,包装类型用于其他地方存储方式不同:用于局部变量的基本类型存在虚拟机栈中的局部变量表中,用于成员变量…

2023年哪个前端框架用的最多?

2023 年,TypeScript 的每月下载量持续稳定增长,年度累计下载量高达2,071,832,110(20.7 亿),展现了强大的市场需求和用户认可。 本文来通过详细的数据(2023 年 npm 累计下载量),看看…

从计算机恢复已删除文件的 6 种方法!

如果您的重要文件之一已从计算机中删除怎么办?如果不小心从硬盘中删除了文件怎么办? 如今的公司通常将重要数据存储在云或硬盘中。但最重要的是,您必须考虑这样一个事实:您可能会丢失计算机上的数据。数据丢失的原因有多种&#x…

【golang】23、gorilla websocket 源码:examples、数据结构、流程

文章目录 一、examples1.1 echo1.1.1 server.go1.1.2 client.go 1.2 command1.2.1 功能和启动方式1.2.2 home.html1.2.3 main.go 1.3 filewatch1.3.1 html1.3.2 serveHome 渲染模板1.3.3 serveWs1.3.4 writer() 1.4 buffer pool1.4.1 server1.4.2 client 1.5 chat1.5.1 server1…