当前位置: 首页 > news >正文

【Qt开发】常用控件(四)

目录

1 -> windowTitle

1.1 -> 相关 API

1.2 -> 代码示例

2 -> windowIcon

2.1 -> 相关 API

2.2 -> 代码示例

2.2.1 -> 设置窗口图标

3 -> qrc 机制

3.1 -> 代码示例


1 -> windowTitle

1.1 -> 相关 API

API说明
windowTitle()获取到控件的窗口标题
setWindowTitle(const QString& title)设置控件的窗口标题

注意:

上述操作针对不同的 widget 可能会有不同的行为。

如果是顶层 widget(独立窗口),这个操作才会有效。

如果是子 widget,这个操作无任何效果。

1.2 -> 代码示例

设置窗口标题

修改 widget.cpp

#include "widget.h"
#include "ui_widget.h"#include <QPushButton>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);this->setWindowTitle("这是窗口标题");QPushButton* button = new QPushButton(this);button->setText("按钮");// 当前不应该给按钮设置window Title,但是设置后无任何效果// 此时没有报错button->setWindowTitle("通过按钮设置窗口标题");button->move(150, 150);
}Widget::~Widget()
{delete ui;
}

2 -> windowIcon

2.1 -> 相关 API

API说明
windowIcon()获取到控件的窗口图标,返回 QIcon 对象
setWindowIcon(const QIcon& icon)设置控件的窗口图标

同 windowTitle,上述操作仅针对顶层 widget 有效。

2.2 -> 代码示例

2.2.1 -> 设置窗口图标

1. 先在 D 盘中放一个图片,名字为 title.jpg

2. 修改 widget.cpp

#include "widget.h"
#include "ui_widget.h"#include <QIcon>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 设置图标// 栈上创建,QIcon对象本身释放不释放,不影响图标最终显示// 路径不要带中文// 不要用绝对路径
//    QIcon icon("E:/Gitee_Qt/qt-daily-learning/QWidget_7/title.jpg");QIcon icon(":/title.jpg");this->setWindowIcon(icon);}Widget::~Widget()
{delete ui;
}

注意:

Windows 下路径的分隔符可以使用 / 也可以使用 \ 。但是如果在字符串中使用 \,需要写作转义字符的形式 \\ 。因此推荐使用 / 。

3. 运行程序,可以看到窗口图标已经成为上述图片

与此同时,程序在任务栏中的图标也发生改变。

实际开发中,一般不会在代码中通过 绝对路径 引入图片,因为我们无法保证程序发布后,用户的电脑上也有同样的路径。

如果使用 相对路径,则需要确保代码中的相对路径写法和图片实际所在的路径匹配(比如代码中写作 “./images/title.jpg”,就需要在当前工作目录中创建 images 目录,并把 title.jpg 放进去)。

绝对路径:以盘符(windows)或者以 / (Linux)开头的路径。

相对路径:以 . (表示当前路径)或者以 .. (表示当前路径上级路径)开头的路径。其中 . 经常也会省略。相对路径的前提是需要明确 “当前工作目录”。

对于 Qt 程序来说,当前工作目录可能是变化的。比如通过 Qt Creator 运行的程序,当前工作目录是项目的构建目录;直接双击 exe 运行,工作目录则是 exe 所在目录。

所谓构建目录,是和 Qt 项目并列的,专门用来放生成的临时文件和最终 exe 的目录。

3 -> qrc 机制

在 Qt 中使用 qrc 机制更方便的来管理项目依赖的静态资源。

qrc 文件是一种 XML 格式的资源配置文件,它用 XML 记录硬盘上的文件和对应的随意指定的资源名称。应用程序通过资源名称来访问这些资源。

在 Qt 开发中,可以通过将资源文件添加到项目中来,方便访问和管理这些资源。这些资源文件可以位于 qrc 文件所在目录的同级或其子目录下。

在构建程序的过程中,Qt 会把资源文件的二进制数据转成 cpp 代码,编译到 exe 中。从而使依赖的资源变得 “路径无关”。

这种资源管理机制并非 Qt 独有,很多开发框架都有类似的机制。例如 Android 的 Resource 和 AssetManager 也是类似的效果。

3.1 -> 代码示例

通过 qrc 管理图片作为图标

1. 右键项目,创建一个 Qt Resource File(qrc 文件),文件名随意起(最好不要带中午),此处叫做 resource.qrc。

2. 在 qrc 编辑器中,添加前缀。

此处前缀设置成 / 即可。

所谓前缀,可以理解成 “目录”。这个前缀决定了后续我们如何在代码中访问资源。

3. 在资源编辑器中,点击 add Files 添加资源文件。

注意:

添加的文件必须是在 qrc 文件的同级目录,或者同级目录的子目录中。因此需要把存储在其他位置的文件复制到项目所在的文件夹中。

4. 在代码中使用 title.jpg 

编辑 widget.cpp

#include "widget.h"
#include "ui_widget.h"#include <QIcon>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 设置图标// 栈上创建,QIcon对象本身释放不释放,不影响图标最终显示// 路径不要带中文// 不要用绝对路径
//    QIcon icon("E:/Gitee_Qt/qt-daily-learning/QWidget_7/title.jpg");QIcon icon(":/title.jpg");this->setWindowIcon(icon);}Widget::~Widget()
{delete ui;
}

注意上述路径的访问规则

  • 使用 : 作为开头,表示从 qrc 中读取资源
  • / 是上面配置的前缀
  • title.jpg 是资源的名称

需要确保代码中编写的路径和添加到的 qrc 中资源的路径匹配。否则资源无法被访问(同时也不会有报错提示)。

5. 运行程序,可以,看到图标已经能正确设置。

可以进入到项目的构建目录,可以看到,目录中多了一个 qrc_resource.cpp

上述代码其实就是通过 unsigned char 数组,把 title.jpg 中的每个字节都记录下来,这些代码会被编译到 exe 中。后续无论 exe 被复制到哪个目录下,都确保能够访问到该图片资源。

上述 qrc 这一套资源管理方案,优点和缺点都很明显。

优点:确保了图片,字体,声音等资源能够真正做到 “目录无关”,无论如何都不会出现资源丢失的情况。

缺点:不适合管理体积大的资源。如果资源比较大(比如几个 MB 的文件),或者资源特别多,生成的最终的 exe 体积就会比较大,程序运行消耗的内存也会增大,程序编译的时间也会显著增加。


感谢各位大佬支持!!!

互三啦!!!

http://www.dtcms.com/a/334173.html

相关文章:

  • 适合2D而非3D的游戏
  • 链表。。。
  • YOLOv5、YOLOv8的损失函数、正负样本匹配策略和anchor_free/anchor_base的差异对比
  • 免费数独游戏,多难度等级挑战
  • 存储设备的核心单位:扇区、页与块
  • CentOS 7 一键部署 上Maria Database(MariaDB)10.3.38 安装手册(避开 Oracle 19c 路径)
  • 北京JAVA基础面试30天打卡11
  • JetPack系列教程(八):PDF库——让Android应用也能优雅“翻页”
  • ESP32 C3 开发板使用教程 01-测试显示屏
  • 【系统分析师】软件需求工程——第11章学习笔记(下)
  • Android 移动端 UI 设计:前端常用设计原则总结
  • 【Docker项目实战】使用Docker部署Notepad轻量级记事本
  • vscode中使用CMake Tools生成compile_commands.json文件后,如何告诉clangd这个文件在哪里呢?
  • MySQL 基础操作与编码设置:从入门到避坑
  • 范式转移:AI幻觉的终结与GPT-5的“可信”架构设计
  • 《解耦的艺术:Python 观察者模式在 GUI 与事件驱动中的实战》
  • 音视频学习(五十四):基于ffmpeg实现音频重采样
  • 【科普向-第一篇】数字钥匙生态全景:手机厂商、车厂与协议之争
  • GPFS集群性能压测
  • C++编程学习阶段性总结
  • 2025年生成式引擎优化(GEO)服务商技术能力评估报告
  • 企业运维规划及Linux介绍虚拟环境搭建
  • ROS相关的ubuntu基础教程
  • 神经网络 常见分类
  • 视觉语言模型(VLA)分类方法体系
  • 6JSON格式转python并实现数据可视化
  • RJ45 网口集成万兆(10Gbps)以太网的核心是通过物理层技术革新和信号处理优化,在传统铜缆(双绞线)介质上突破速率限制,其原理可从以下几个关键维度解析
  • Express开发快速学习
  • 探秘gRPC——gRPC原理详解
  • B3924 [GESP202312 二级] 小杨的H字矩阵