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

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 机制的全面解析:

基本概念

  1. 资源文件(.qrc):XML 格式的文件,列出了需要嵌入的资源
  2. 资源前缀:类似于文件系统的路径前缀,用于组织资源
  3. 编译时处理:资源在编译时被转换为 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作为背景,并将其显示在窗口的最底层。让我逐步解释为什么这样可以设置背景:

  1. QLabel *background = new QLabel(this);

    • 创建一个QLabel对象,并将当前窗口(this)作为其父对象
  2. background->setPixmap(QPixmap(":/picture.jpg"));

    • 为QLabel设置一张图片(从资源文件中加载)
  3. background->setScaledContents(true);

    • 让图片自动缩放以适应QLabel的大小
  4. background->setGeometry(0, 0, width(), height());

    • 将QLabel的大小设置为与父窗口相同,覆盖整个窗口区域
  5. background->lower();

    • 这是关键:将QLabel移动到所有兄弟部件的底部(z-order最低)

这样设置背景有效的原理是:

  • 通过将QLabel设为与窗口同样大小,它覆盖了整个窗口区域
  • lower()确保这个背景Label位于所有其他部件的下方(在z轴顺序上)
  • 由于它在最底层,其他部件会显示在它上面,形成"背景"效果
  • 图片缩放设置确保无论窗口大小如何变化,图片都会自动填充整个背景

如果没有调用lower(),背景Label可能会遮挡其他部件,或者与其他部件处于同一层级导致显示问题。通过将其置于底层,就创建了一个真正的背景效果。
在这里插入图片描述

windowOpacity

我们上面设置背景,是为了windowOpacity做铺垫:

函数签名返回值参数说明功能描述
float windowOpacity()float获取控件的不透明度值,范围 0.0(完全透明)到 1.0(完全不透明)。
void setWindowOpacity(float)voidfloat 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);
}

点击减号,可以变透明:
在这里插入图片描述
点击加号,可以变不透明:
在这里插入图片描述

相关文章:

  • 【iscsi】服务器重启找不到iscsi的磁盘,导致磁盘挂载失败
  • 行动作用作用
  • Debezium BinaryLogClient详解
  • 【愚公系列】《Manus极简入门》024-表演艺术教练:“舞台魔法师”
  • 【车辆OTA技术全景解析:从原理到应用开发实践】
  • idea里maven自定义的setting.xml文件不生效问题
  • JAVA八股文
  • jenkins配置多nexus仓库多maven版本
  • Amazing晶焱科技:系统级 EOS 测试方法 - System Level EOS Testing Method
  • llama-Factory不宜直接挂接Ollama的大模型
  • 上海雏鸟科技再赴越南,助力10518架无人机刷新吉尼斯记录
  • 淘宝按图搜索商品(拍立淘)爬虫实战指南
  • 英伟达发布Llama-Nemotron系列新模型,性能超越DeepSeek-R1
  • leetcode1091. 二进制矩阵中的最短路径-medium
  • 使用 Apache POI 生成包含文本和图片的 Word 文档
  • 排序算法——计数排序
  • 开发 Chrome 扩展中的侧边栏图标设置实录(Manifest V3)
  • 医疗人工智能大模型中的关键能力:【中期训练】mid-training
  • 【javascript】console对象
  • 尤雨溪宣布:Vue 生态正式引入 AI
  • 外交部发言人就印巴局势升级答记者问
  • 印巴战火LIVE丨“快速接近战争状态”:印度袭击巴军事基地,巴启动反制军事行动
  • 上海“世行对标改革”的税务样本:设立全国首个税务审判庭、制定首个税务行政复议简易程序
  • 康子兴评《文明的追求》|野人脚印:鲁滨逊的恐惧与文明焦虑
  • 中俄元首今年首次面对面会谈,达成哪些新的重要共识?
  • 中华人民共和国和俄罗斯联邦关于全球战略稳定的联合声明