0
点赞
收藏
分享

微信扫一扫

HTML之列表学习记录

您好 2024-11-18 阅读 16

前言:当我们在写软件时,在等待阻塞耗时操作时可以将鼠标变为忙状态,并在一段时间后恢复状态,可以用到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;
}
}

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

举报

相关推荐

0 条评论