当前位置: 首页 > 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);
}

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

http://www.xdnf.cn/news/314461.html

相关文章:

  • 【Science Advances】普林斯顿大学利用非相干光打造可重构纳米光子神经网络
  • 全文索引数据库Elasticsearch底层Lucene
  • SafeDrive:大语言模型实现自动驾驶汽车知识驱动和数据驱动的风险-敏感决策——论文阅读
  • 【Pandas】pandas DataFrame expanding
  • 常用设计模式在 Spring Boot 项目中的实战案例
  • 【LLM+Code】Devin PromptTools详细解读
  • 【spring】Spring、Spring MVC、Spring Boot、Spring Cloud?
  • 【Bootstrap V4系列】学习入门教程之 组件-折叠(Collapse)
  • Python爬虫(20)Python爬虫数据存储技巧:二进制格式(Pickle/Parquet)性能优化实战
  • 802.11s Mesh 组网框架流程
  • 【Hive入门】Hive数据导入与导出:批量操作与HDFS数据迁移完全指南
  • Windows环境下maven的安装与配置
  • 前端取经路——工程化渡劫:八戒的构建之道
  • 在Python和C/C++之间共享std::vector<std::vector<int>>数据
  • Linux复习笔记(一)基础命令和操作
  • 信创生态核心技术栈:国产芯片架构适配详解
  • Kafka生产者send方法详解
  • spark基本介绍
  • 当当狸智能天文望远镜 TW2 | 用科技触摸星辰,让探索触手可及
  • 如何使用极狐GitLab 软件包仓库功能托管 maven?
  • Spark 处理过程转换:算子与行动算子详解
  • 团队协作的润滑剂——GitHub与协作流程
  • P1782 旅行商的背包 Solution
  • Dagger中编译import报找不到ProvideClientFactory,initialize中ProvideClientFactory爆红
  • 笔记本外接显示器检测不到hdmi信号
  • 动态规划背包问题
  • AI健康小屋:开启智能健康管理新时代
  • 以生成性学习消除AI焦虑
  • Spire.Presentation组件的使用(2)--制作标题
  • TruPlasma DC 电路管理软件通快霍廷格TruPlasma DC 4005 DC4010