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

目录

[1 -> windowOpacity](#1 -> windowOpacity)

[1.1 -> 相关 API](#1.1 -> 相关 API)

[1.2 -> 代码示例](#1.2 -> 代码示例)

[2 -> cursor](#2 -> cursor)

[2.1 -> 相关 API](#2.1 -> 相关 API)

[2.2 -> 代码示例](#2.2 -> 代码示例)

[2.2.1 -> 在 Qt Designer 中设置按钮的光标](#2.2.1 -> 在 Qt Designer 中设置按钮的光标)

[2.2.2 -> 通过代码设置按钮的光标](#2.2.2 -> 通过代码设置按钮的光标)

[3 -> 总结](#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 会减少不透明度,窗口会越来越透明
cpp 复制代码
#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 就是自带的沙漏形状的光标。

cpp 复制代码
#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 跳转到源码即可看到。

cpp 复制代码
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 系统内置的多种光标形状枚举,方便开发者根据需求选用。


感谢各位大佬支持!!!

互三啦!!!

相关推荐
程序员Sunday14 分钟前
Promise.all、allSettled、race、any 怎么选,失败后其他请求会怎样
开发语言·前端·javascript
niucloud-admin15 分钟前
JAVA V6 多商户商城 开发文档——管理端前端
前端
weixin_4222013020 分钟前
如何解决小程序图标点击热区小,落点不准问题?
前端·小程序·样式·点击热区·扩大
小鹿的周先生24 分钟前
第18章-MCP
服务器·网络·人工智能
YumiProxy40 分钟前
代理IP自动切换实战:会话保持与请求头配置避坑指南
服务器·网络·网络协议·tcp/ip·ip
西索斯coding1 小时前
Kimi k2.7-code-highspeed 接入 Cline 教程:baseURL 路由变更 + model_id 正确写法
java·服务器·数据库·ai
szial1 小时前
JavaScript 的 call、apply 和 bind:如何控制函数调用
开发语言·前端·javascript
CopyCode1 小时前
Agent 开发不是模型训练:一个前端的入门认知
前端·llm·agent
吠品1 小时前
HTTPS 真身:HTTP 套了层 TLS
java·服务器·前端
JYeontu1 小时前
实现一个「曲线滑块验证」功能
前端·javascript·html