当前位置: 首页 > article >正文

QT<30> Qt中使鼠标变为转圈忙状态

前言:当我们在写软件时,在等待阻塞耗时操作时可以将鼠标变为忙状态,并在一段时间后恢复状态,可以用到GxtWaitCursor:Qt下基于RAII的鼠标等待光标类。

一、效果演示

二、详细代码

在项目中添加C++文件,命名为GxtWaitCursor,继承自QObject。

#pragma once

#include <QObject>

//=======================================================================================
// 等待光标类
//=======================================================================================
class GxtWaitCursor : public QObject
{
    Q_OBJECT

public:
    /*
    **  构造函数:使光标进入忙录状态
    */
    GxtWaitCursor(QObject *parent = nullptr);

    /*
    **  构造函数:使光标进入忙录状态并于指定时长后恢复
    */
    GxtWaitCursor(int msec, QObject *parent = nullptr);

    /*
    **  析构函数:恢复光标
    */
    ~GxtWaitCursor();

private:
    void beginWait(int msec = 0);
    void endWait();

private:
    /*
    **  光标是否已经恢复
    */
    bool m_cursorHasRestored { false };
};
#include <QTimer>
#include <QCursor>
#include <QGuiApplication>
#include "gxtwaitcursor.h"

//=======================================================================================
GxtWaitCursor::GxtWaitCursor(QObject *parent)
    : QObject(parent)
{
    beginWait();
}

//=======================================================================================
GxtWaitCursor::GxtWaitCursor(int msec, QObject *parent)
    : QObject(parent)
{
    beginWait(msec);
}

//=======================================================================================
GxtWaitCursor::~GxtWaitCursor()
{
    endWait();
}

//=======================================================================================
void GxtWaitCursor::beginWait(int msec)
{
    m_cursorHasRestored = false;

    QGuiApplication::setOverrideCursor(QCursor(Qt::WaitCursor));

    if (msec > 0)
    {
        QTimer::singleShot(msec, [this]
        {
            if (!m_cursorHasRestored)
            {
                QGuiApplication::restoreOverrideCursor();
                m_cursorHasRestored = true;
            }
        });
    }
}

//=======================================================================================
void GxtWaitCursor::endWait()
{
    if (!m_cursorHasRestored)
    {
        QGuiApplication::restoreOverrideCursor();
        m_cursorHasRestored = true;
    }
}

在需要使用的地方,实例化该类。


http://www.kler.cn/a/400774.html

相关文章:

  • JavaScript 原型
  • 网络安全:我们的安全防线
  • 解决docker mysql命令行无法输入中文
  • 理解 Python 中的 __getitem__ 方法:在自定义类中启用索引和切片操作
  • 利用Python爬虫获取淘宝店铺详情
  • 2411rust,76~79
  • 第 12 章 - Go语言 方法
  • 【机器学习】数学知识:欧式距离(Euclidean Distance)和曼哈顿距离(Manhattan Distance)
  • Siglus引擎 Unpack | 未完待续
  • 单用户模式下执行passwd root ,返回的是(current) UNIX passwd
  • WPF命令
  • OAI-5G开源通信平台实践(二)
  • 【数据结构】【线性表】静态链表(附C语言源码)
  • 多模态基础模型:从专家到通用助手
  • 【后端】版本控制
  • 特权帐户安全 CyberArk
  • 开源财富管理软件Ghostfolio的安装
  • el-table中增加校验方法(二)
  • JavaScript 原型
  • golang通用后台管理系统09(系统操作日志记录)
  • MySQL —— MySQL索引介绍、索引数据结构、聚集索引和辅助索引、索引覆盖
  • C#.Net筑基-模式匹配汇总
  • 剧本杀门店预约小程序,解锁沉浸式推理体验
  • 热点更新场景,OceanBase如何实现性能优化
  • Debezium-EmbeddedEngine
  • 基于云计算的文件存储与共享平台开发