【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 体积就会比较大,程序运行消耗的内存也会增大,程序编译的时间也会显著增加。
感谢各位大佬支持!!!
互三啦!!!