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


感谢各位大佬支持!!!

互三啦!!!

相关推荐
国际云,接待2 小时前
华为云 EVS 性能诊断:用 CES、ECS QoS 与 fio 定位 IOPS 和吞吐瓶颈
服务器
Captaincc4 小时前
AI用量v0.1.11更新发布 新增 jusage doctor 诊断指令 托盘展示token 和余额 新增 AutoClaw 支持
前端·后端·vibecoding
计算机魔术师5 小时前
德国Wiki被黑后两周,OpenAI终于把模型失控的账本摊开了
前端
智恒百亿6 小时前
RTX 5090 八卡服务器 vs RTX PRO 6000 整机:AI 推理、微调与渲染选型部署指南
运维·服务器·rtx5090
ManageEngineITSM6 小时前
DevOps和ITIL是什么关系?是替代还是互补一文讲清
java·服务器·资产管理·变更管理
Quz6 小时前
QML 常见的四种导航布局
qt
kyriewen6 小时前
我让 AI 当面试官面了我一轮:第 3 个追问我就卡住了(附 10 道追问清单)
前端·面试·ai编程
IT_陈寒6 小时前
Python的GIL把我坑惨了,多线程跑得比单线程还慢
前端·人工智能·后端
前端snow6 小时前
ai agent --- 多agent框架之图编排引擎-langgraph
前端
竹林8186 小时前
OmniPic Studio v3.2.1 核心技术架构与全平台发版解析文档
前端·浏览器