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

【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.xdnf.cn/news/17914.html

相关文章:

  • 《深度解构:构建浏览器端Redis控制台的WebSocket协议核心技术》
  • 开源 Arkts 鸿蒙应用 开发(十八)通讯--Ble低功耗蓝牙服务器
  • Flink Stream API 源码走读 - window 和 sum
  • 前端开发入门书籍推荐:Vue.js 3与前端基础的完美组合
  • 九尾狐未来机械锂晶核
  • 数据结构:满二叉树 (Full Binary Tree) 和 完全二叉树 (Complete Binary Tree)
  • Three.js三大组件:场景(Scene)、相机(Camera)、渲染器(Renderer)
  • tree组件(几种不同分叉树Vue3)
  • 免费万能电子书格式转换器!Neat Converter支持 ePub、Azw3、Mobi、Doc、PDF、TXT 文件的相互转换。
  • 【图像算法 - 15】智能行李识别新高度:基于YOLO12实例分割与OpenCV的精准检测(附完整代码)
  • React手撕组件和Hooks总结
  • springboot项目单独对数据源配置加解密
  • 编程基础之字符串——过滤多余的空格
  • B3844 [GESP样题 二级] 画正方形
  • CPP多线程2:多线程竞争与死锁问题
  • 复合机器人食品分拣生产线:一体化控制系统引领高效柔性新食代
  • 硬核北京 | 2025世界机器人大会“破圈”,工业智能、康养科技…… 亦庄上演“机器人总动员”
  • Java 多线程教程
  • 心路历程-三个了解敲开linux的大门
  • 第三十七天(js前端数据加密和混淆)
  • 设计模式之静态代理
  • 拒绝造轮子(C#篇)使用SqlSugar实现数据库的访问
  • KingbaseES高可用架构深度解析——从读写分离到异地灾备的全方位守护
  • Vue2.x核心技术与实战(一)
  • Flutter InheritedWidget 详解:从生命周期到数据流动的完整解析
  • 《探索IndexedDB实现浏览器端UTXO模型的前沿技术》
  • Blackwell 和 Hopper 架构的 GPGPU 新功能全面综述
  • debian 13 显示中文字体 不再显示菱形块 终端显示中文
  • 【121页PPT】锂膜产业MESERP方案规划建议(附下载方式)
  • week1-[循环嵌套]画正方形