【Qt开发】常用控件(五)

发布于:2025-08-20 ⋅ 阅读:(17) ⋅ 点赞:(0)

目录

1 -> windowOpacity

1.1 -> 相关 API

1.2 -> 代码示例

2 -> cursor

2.1 -> 相关 API

2.2 -> 代码示例

2.2.1 -> 在 Qt Designer 中设置按钮的光标

2.2.2 -> 通过代码设置按钮的光标

3 -> 总结


1 -> windowOpacity

在现代 UI 设计中,透明度效果已成为提升用户体验的关键技术。从 macOS 的亚克力效果到 Windows 11 的云母材质,透明界面元素创造出深度感和现代感。Qt 的 windowOpacity 属性提供了实现这些效果的强大工具。

1.1 -> 相关 API

API 说明
windowOpacity() 获取到控件的不透明数值。返回 float,取值为 0.0 -> 1.0 其中 0.0 表示全透明,1.0 表示完全不透明
setWindowOpacity(float n) 设置控件的不透明数值

1.2 -> 代码示例

调整窗口透明度

1. 在界面上拖放两个按钮,分别用来增加不透明度和减少不透明度。

objectName 分别是 pushButton_add 和 pushButton_sub。

2. 编写 widget.cpp,编写两个按钮的 slot 函数

  • 点击 pushButton_add 会增加不透明度,窗口会逐渐恢复
  • 点击 pushButton_sub 会减少不透明度,窗口会越来越透明
#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 opacity = this->windowOpacity();
    if (opacity >= 1)
    {
        return;
    }
    qDebug() << opacity;
    opacity += 0.1;
    this->setWindowOpacity(opacity);
}

void Widget::on_pushButton_sub_clicked()
{
    float opacity = this->windowOpacity();
    if (opacity <= 0)
    {
        return;
    }
    qDebug() << opacity;
    opacity -= 0.1;
    this->setWindowOpacity(opacity);
}

3. 执行程序,可以看到,点击几下 - 之后,就可以透过窗口看到后面的代码了。点击 + 又会逐渐恢复。

同时在控制台也可以看到 opacity 数值的变化。

2 -> cursor

2.1 -> 相关 API

API 说明
cursor()

获取到当前 widget 的 cursor 属性,返回 QCursor 对象

当鼠标悬停在该 widget 上时,就会显示出对应的形状

setCursor(const QCursor& cursor)

设置该 widget 光标的形状

仅在鼠标停留在该 widget 上时生效

QGuiApplication::setOverrideCursor(const QCursor& cursor)

设置全局光标的形状。对整个程序中的所有 widget 都会生效

覆盖上面的 setCursor 设置的内容

2.2 -> 代码示例

2.2.1 -> 在 Qt Designer 中设置按钮的光标

1. 在界面中创建一个按钮。

2. 直接在右侧属性编辑区修改 cursor 属性为 “等待”。

3. 运行程序,鼠标悬停到按钮上,即可看到光标的变化。

2.2.2 -> 通过代码设置按钮的光标

1. 编写 widget.cpp。

其中 Qt::WaitCursor 就是自带的沙漏形状的光标。

#include <QPushButton>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 创建按钮
    QPushButton* button = new QPushButton(this);
    button->resize(100, 50);
    button->move(100, 100);
    button->setText("这是⼀个按钮");

     // 设置按钮的 cursor
    button->setCursor(QCursor(Qt::WaitCursor));
}

系统内置的光标形状如下

Ctrl + 左键 点击 Qt::WaitCursor 跳转到源码即可看到。

enum CursorShape {
        ArrowCursor,
        UpArrowCursor,
        CrossCursor,
        WaitCursor,
        IBeamCursor,
        SizeVerCursor,
        SizeHorCursor,
        SizeBDiagCursor,
        SizeFDiagCursor,
        SizeAllCursor,
        BlankCursor,
        SplitVCursor,
        SplitHCursor,
        PointingHandCursor,
        ForbiddenCursor,
        WhatsThisCursor,
        BusyCursor,
        OpenHandCursor,
        ClosedHandCursor,
        DragCopyCursor,
        DragMoveCursor,
        DragLinkCursor,
        LastCursor = DragLinkCursor,
        BitmapCursor = 24,
        CustomCursor = 25
    };

2. 运行程序,观察效果。

3 -> 总结

windowOpacity方面,它是实现窗口透明度效果的关键属性,通过windowOpacity()可获取当前窗口不透明度(返回 0.0-1.0 的 float 值,对应全透明到完全不透明),setWindowOpacity(float n)则能设置该数值。文中给出的代码示例通过两个按钮的槽函数,实现了点击增减窗口透明度的功能,直观展现了该属性的用法,能让窗口呈现从清晰到透明再恢复的动态效果。

关于光标设置,涉及多个 API:cursor()用于获取当前组件的光标对象,setCursor(const QCursor& cursor)可设置组件的光标形状(仅在鼠标悬停该组件时生效),QGuiApplication::setOverrideCursor(const QCursor& cursor)则能设置全局光标(覆盖组件自身设置)。示例不仅展示了在 Qt Designer 中直接修改按钮光标属性的操作,还通过代码演示了如何为按钮设置光标形状,同时列出了 Qt 系统内置的多种光标形状枚举,方便开发者根据需求选用。


感谢各位大佬支持!!!

互三啦!!!


网站公告

今日签到

点亮在社区的每一天
去签到