
1. windowTitle属性
1.1. windowTitle相关API
|----------------------------------------|------------|
| windowTitle() | 获取到控件的窗⼝标题 |
| setWindowTitle( const QString& title) | 设置控件的窗⼝标题 |
注意! 上述设置操作针对不同的 widget 可能会有不同的⾏为.
如果是顶层 widget (独⽴窗⼝), 这个操作才会有效.
如果是⼦ widget, 这个操作⽆任何效果.
1.2. windowTitle示例
widget.cpp:
cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
this->setWindowTitle("自定义窗口标题");
}
Widget::~Widget()
{
delete ui;
}
示例效果:

2. windowIcon属性
2.1. windowIcon相关API
|-------------------------------------|--------------------------|
| windowIcon() | 获取到控件的窗⼝图标. 返回 QIcon 对象. |
| setWindowIcon(const QIcon& icon) | 设置控件的窗⼝图标. |
同 windowTitle, 上述操作仅针对顶层 widget 有效
2.2. windowIcon示例
改变窗口的图标显示
在widget.cpp中代码:
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对象不支持挂载到对象树上
QIcon icon("D:/e8294d974c94197d583306e3bb702864.png");
this->setWindowIcon(icon);
}
Widget::~Widget()
{
delete ui;
}

我们可以看到改窗口的图标是一朵玫瑰。
2.3. 问题提出
我们在实际的开发中我们⼀般不会在代码中通过绝对路径引⼊图⽚. 因为我们⽆法保证程序发布后, 用户的电脑上也有同样的路径.
如果使⽤相对路径, 则需要确保代码中的相对路径写法和图⽚实际所在的路径匹配 (⽐如代码
中写作 "./image/rose.jpg", 就需要在当前⼯作⽬录中创建 image ⽬录, 并把 rose.jpg 放进去)
这个时候就会出现下面两个问题:
- 开发者的文件资源路径和用户的不一致怎么办?
- 就算开发者的文件资源路径和用户相同或者相对关系相同,但是用户不小心删除了相关的文件怎么办?
2.4. qrc机制
2.4.1.qrc机制的简要说明
为了解决上述的俩个问题,Qt引入了qrc机制更⽅便的来管理项⽬依赖的静态资源.
qrc ⽂件是⼀种XML格式的资源配置⽂件, 它⽤XML记录硬盘上的⽂件和对应的随意指定的资
源名称. 应⽤程序通过资源名称来访问这些资源.
在Qt开发中, 可以通过将资源⽂件添加到项⽬中来⽅便地访问和管理这些资源. 这些资源⽂件
可以位于qrc⽂件所在⽬录的同级或其⼦⽬录下.
在构建程序的过程中, Qt 会把资源⽂件的⼆进制数据转成 cpp 代码, 编译到 exe 中. 从⽽使依
赖的资源变得 "路径⽆关".这种资源管理机制并⾮ Qt 独有, 很多开发框架都有类似的机制. 例如 Android 的 Resources 和 AssetManager 也是类似的效果.
2.4.2. qrc机制使用示例
代码示例:通过 qrc 管理图⽚作为图标
1.右键项⽬, 创建⼀个 Qt Resource File (qrc ⽂件), ⽂件名随意起(不要带中⽂), 此处叫做 resource.qrc .

- 在qrc编辑器中,添加前缀

- 在资源编辑器中,点击add FIles添加资源⽂件.

4.在代码中使用
widget.cpp文件:
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对象不支持挂载到对象树上
QIcon icon("D:/e8294d974c94197d583306e3bb702864.png");
this->setWindowIcon(icon);
}
Widget::~Widget()
{
delete ui;
}

3.windowOpacity属性
3.1. windowOpacity相关API
|--------------------|-------------------------------------------------------------------|
| windowOpacity() | 获取到控件的不透明数值. 返回 float, 取值为 0.0 -> 1.0 其中 0.0 表⽰全透明, 1.0 表⽰完全不透明. |
| setWindowOpacity() | 设置控件的不透明数值 |
3.2. windowOpacity示例
调整窗口透明度
widget.cpp代码:
cpp
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushbutton_add_clicked()
{
float f = this->windowOpacity();
qDebug() << f;
if(f >= 1.0)
{
return;
}
f += 0.1;
this->setWindowOpacity(f);
}
void Widget::on_pushButton_sub_clicked()
{
float f = this->windowOpacity();
qDebug() << f;
if(f <= 0.0)
{
return;
}
f -= 0.1;
this->setWindowOpacity(f);
}
示例效果:点击'+'后窗口的不透明度会增加,点击'-'后窗口的不透明度减小

3.3. 问题提出与回答
我们在上述的代码中明明是对窗口的不透明度的值减少了0.1为什么在终端控制台上面减掉的具体的值不是0.1呢?
要回答这个问题我们就要弄懂以下的东西了。
在C/C++,Java等主流的编程语言中对于浮点数的存储采用的是IEEE的标准来存储浮点数的。该标准讲浮点数分成了三个部分来进行存储:符号位,数值部分,次方数。无论是32位的float类型还是64位的都变了类型要去表示一个小数不是都能做到精确表示的,比如:数值部分要表示0.75,可以用0.5(2^-1) + 0.25(2^-2),但是对于0.654839就无法精确的表示了。