QT —— QWidget(2)
QT —— QWidget(2)
- windowTitle
- windowIcon
- Qt 资源系统 (qrc 机制) 详解
- 基本概念
- 使用方法
- 1. 创建 .qrc 文件
- 设置背景
- windowOpacity
我们今天继续来学习QWidget,如果大家上一次的博客还没有看过,可以点击这里:
https://blog.csdn.net/qq_67693066/article/details/147684027
windowTitle
方法名 | 描述 |
---|---|
windowTitle() | 获取控件的窗口标题。 |
setWindowTitle(const QString& title) | 设置控件的窗口标题。参数 title 为窗口标题的文本内容。 |
注意! 上述设置操作针对不同的 widget 可能会有不同的行为.如果是顶层 widget (独立窗口), 这个操作才会有效.如果是子widget, 这个操作无任何效果.
代码示例: 设置窗口标题:
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 设置窗⼝标题this->setWindowTitle("这是标题");
}
windowIcon
方法名 | 描述 |
---|---|
windowIcon() | 获取控件的窗口图标,返回 QIcon 对象。 |
setWindowIcon(const QIcon& icon) | 设置控件的窗口图标。参数 icon 为要设置的窗口图标的 QIcon 对象。 |
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QIcon icon("你的图片路径");// 设置图标this->setWindowIcon(icon);
}
🎹 同 windowTitle, 上述操作仅针对顶层 widget 有效.
这里提一下构建目录的概念::
使用 QDir::currentPath() 即可获取到当前工作目录:
Qt 资源系统 (qrc 机制) 详解
Qt 的资源系统 (qrc 机制) 是一种将二进制文件(如图片、音频、翻译文件等)嵌入到应用程序可执行文件中的方法。以下是关于 qrc 机制的全面解析:
基本概念
- 资源文件(.qrc):XML 格式的文件,列出了需要嵌入的资源
- 资源前缀:类似于文件系统的路径前缀,用于组织资源
- 编译时处理:资源在编译时被转换为 C++ 代码并链接到应用程序中
使用方法
1. 创建 .qrc 文件
在 Qt Creator 中:
- 右键项目 → Add New → Qt → Qt Resource File
- 命名后会自动生成 .qrc 文件
在 qrc 编辑器中, 添加前缀:
然后点击Add Files添加文件:
这里注意一下,添加的文件件必须是在 qrc 文件的同级目录, 或者同级目录的子目录中. 因此如果资源位置不对的话需要把对应的资源文件移到对应的目录。
在代码中使用:
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QIcon icon(":/picture.jpg");// 设置图标this->setWindowIcon(icon);
}
注意上述路径的访问规则:
- 使用 : 作为开头, 表示从 qrc 中读取资源.
- / 是上面配置的前缀
- rose.jpg 是资源的名称
需要确保代码中编写的路径和添加到 qrc 中资源的路径匹配. 否则资源无法被访问 (同时也不会有报错提示)
设置背景
我们的窗口也可以设置背景,设置背景的方法有很多,我们这里选择QLable的方式来操作:
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QLabel *background = new QLabel(this);background->setPixmap(QPixmap(":/picture.jpg"));background->setScaledContents(true); // 图片自适应大小background->setGeometry(0, 0, width(), height());background->lower(); // 确保背景在底层
}
这段代码创建了一个QLabel作为背景,并将其显示在窗口的最底层。让我逐步解释为什么这样可以设置背景:
-
QLabel *background = new QLabel(this);
- 创建一个QLabel对象,并将当前窗口(this)作为其父对象
-
background->setPixmap(QPixmap(":/picture.jpg"));
- 为QLabel设置一张图片(从资源文件中加载)
-
background->setScaledContents(true);
- 让图片自动缩放以适应QLabel的大小
-
background->setGeometry(0, 0, width(), height());
- 将QLabel的大小设置为与父窗口相同,覆盖整个窗口区域
-
background->lower();
- 这是关键:将QLabel移动到所有兄弟部件的底部(z-order最低)
这样设置背景有效的原理是:
- 通过将QLabel设为与窗口同样大小,它覆盖了整个窗口区域
lower()
确保这个背景Label位于所有其他部件的下方(在z轴顺序上)- 由于它在最底层,其他部件会显示在它上面,形成"背景"效果
- 图片缩放设置确保无论窗口大小如何变化,图片都会自动填充整个背景
如果没有调用lower()
,背景Label可能会遮挡其他部件,或者与其他部件处于同一层级导致显示问题。通过将其置于底层,就创建了一个真正的背景效果。
windowOpacity
我们上面设置背景,是为了windowOpacity做铺垫:
函数签名 | 返回值 | 参数说明 | 功能描述 |
---|---|---|---|
float windowOpacity() | float | 无 | 获取控件的不透明度值,范围 0.0 (完全透明)到 1.0 (完全不透明)。 |
void setWindowOpacity(float) | void | float n (范围 0.0 -1.0 ) | 设置控件的不透明度值,0.0 表示完全透明,1.0 表示完全不透明。 |
我们可以试试调整窗口的透明度:
在界面上拖放两个按钮, 分别用来增加不透明度和减少不透明度.
objectName 分别为 pushButton_add 和 pushButton_sub:
生成对应的槽函数:
void Widget::on_pushButton_add_clicked()
{float opacity = this->windowOpacity();if (opacity >= 1.0) {return;}qDebug() << opacity;opacity += 0.1;this->setWindowOpacity(opacity);
}void Widget::on_pushButton_sub_clicked()
{float opacity = this->windowOpacity();if (opacity <= 0.0) {return;}qDebug() << opacity;opacity -= 0.1;this->setWindowOpacity(opacity);
}
点击减号,可以变透明:
点击加号,可以变不透明: