QT —— QWidget(2)

我们今天继续来学习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);
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值