Qt QWidget Loading界面并覆盖在其他控件上面

目录

  • 一、效果图
  • 二、Loading
  • 三、使用

一、效果图

在这里插入图片描述

界面中有一个Label,一个Button
点击Buttion,显示Loading的界面,并覆盖到Label和Button上面

二、Loading

loadingwidget.h

#ifndef LOADINGWIDGET_H
#define LOADINGWIDGET_H#include <QTimer>
#include <QWidget>class LoadingWidget : public QWidget
{
Q_OBJECT
public:
explicit LoadingWidget(QWidget *parent = nullptr);signals:// QWidget interface
protected:
void paintEvent(QPaintEvent *event) override;
void timerEvent(QTimerEvent *event) override;
void showEvent(QShowEvent *event) override;
void hideEvent(QHideEvent *event) override;private slots:
void startUpdateTimer();
void stopUpdateTimer();private:
QTimer *timer;
int m_timerID = -1;
const int UPDATE_INTERVAL_TIME = 60; //msint m_angle = 0;  // 旋转的角度};#endif // LOADINGWIDGET_H

loadingwidget.cpp

#include "loadingwidget.h"#include <QPainter>
#include <QDebug>LoadingWidget::LoadingWidget(QWidget *parent): QWidget{parent}
{setAttribute(Qt::WA_StyledBackground);setStyleSheet("QWidget{background-color: rgba(0, 0, 0, 127);}");
}void LoadingWidget::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 定义旋转中心和旋转角度painter.translate(width() / 2, height() / 2);painter.rotate(m_angle);// 设置笔的宽度和颜色,并画圆int radius = width() / 20;    // 圆的半径QPen pen;pen.setWidth(radius / 5);pen.setColor(QColor(0, 0, 0, 127));painter.setPen(pen);painter.drawEllipse(-radius, -radius, 2*radius, 2*radius);// 在圆上画一个定义好颜色的扇形外边框pen.setColor(QColor(0, 160, 230));painter.setPen(pen);painter.drawArc(-radius, -radius, 2*radius, 2*radius, 0 * 16, 90 * 16);}void LoadingWidget::timerEvent(QTimerEvent *event)
{m_angle = (m_angle + 10) % 360; // 每次旋转10度update();qDebug() << "update " << m_angle;
}void LoadingWidget::showEvent(QShowEvent *event)
{QMetaObject::invokeMethod(this, "startUpdateTimer");
}void LoadingWidget::hideEvent(QHideEvent *event)
{QMetaObject::invokeMethod(this, "stopUpdateTimer");
}void LoadingWidget::startUpdateTimer()
{if(m_timerID == -1){// 每 UPDATE_INTERVAL_TIME 毫秒触发定时器,执行timerEvent,更新UIm_timerID = startTimer(UPDATE_INTERVAL_TIME);}
}void LoadingWidget::stopUpdateTimer()
{if (m_timerID != -1) {killTimer(m_timerID);m_timerID = -1;}
}


三、使用

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include "loadingwidget.h"#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_clicked();private:Ui::MainWindow *ui;LoadingWidget* loadingWidget;// QWidget interface
protected:void resizeEvent(QResizeEvent *event) override;};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "loadingwidget.h"
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);loadingWidget = new LoadingWidget(this);loadingWidget->setFixedSize(width(), height());  // 设置窗口大小loadingWidget->hide();
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{loadingWidget->show();// 点击按钮显示Loading界面后,10秒结束显示QTimer::singleShot(10000, [this](){loadingWidget->hide();});
}// Loading界面的大小随父窗口的大小而改变
void MainWindow::resizeEvent(QResizeEvent *event)
{loadingWidget->setFixedSize(width(), height());  // 设置窗口大小
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/444046.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#——三角形面积公式

已知三角形的三个边&#xff0c;求面积&#xff0c;可以使用海伦公式。 因此&#xff0c;可以执行得到三角形面积公式的计算方法代码如下&#xff1a; /** / <summary>* / 三角形面积公式* / </summary>* / <param name"a">边长a</param>*…

etcd自动化安装配置教程

文章目录 前言一、简介1. 简介2. 特点3. 端口介绍 二、etcd安装教程&#xff08;单机版&#xff09;1. 复制脚本2. 增加执行权限3. 执行脚本4. 查看启动状态5. 卸载etcd 三、etcd安装教程&#xff08;集群版&#xff09;1. 复制脚本2. 增加执行权限3. 分发脚本4. 执行脚本5. 启…

【HarmonyOS】鸿蒙开发之HTTP网络请求——第5章

HTTP网络请求封装 network/request.ets import { configInterface } from ./type import http from ohos.net.http import { getToken } from ../utils/storage//网络请求封装 export const request (config:configInterface)>{let httpRequest:http.HttpRequest http.c…

模拟实现哈希表 - HashMap(Java版本)

目录 1. 概念 2. 冲突-概念 3. 冲突-避免 4. 冲突-避免-哈希函数设计 5. 冲突-避免-负载因子调节 ⭐⭐⭐⭐⭐ 6. 冲突-解决 6.1 冲突-解决-闭散列 6.2 冲突-解决-开散列/哈希桶 ⭐⭐⭐⭐⭐ 7. 冲突严重时的解决办法 8. 模拟实现 1. 概念 顺序结构以及平衡树中&#…

代码随想录day16--二叉树的应用4

LeetCode513.找树左下角的值 题目描述&#xff1a; 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7 解题思…

除毛可以用宠物空气净化器吗?猫用空气净化器哪些品牌吸毛好?

作为一位长期养猫的铲屎官&#xff0c;我深刻理解只有养猫人才懂的困扰&#xff0c;那就是家里到处都是猫毛和异味。我发现自从开始养猫之后&#xff0c;家里的空气质量变得不佳。猫毛和皮屑飞扬&#xff0c;而且室内空气中的污染物也越来越多。这种低质量的空气对我们的健康有…

分组密码工作模式

在密码学中&#xff0c;分组密码工作模式可以提供诸如机密性或真实性的信息服务。 基于分组的对称加密算法&#xff08;DES 、AES等&#xff09;只是描述如何根据加密密钥对一段固 定长度&#xff08;块&#xff09;的数据进行加密&#xff0c;对于比较长的数据&#xff0c;分组…

性能测试+Jmeter介绍

文章目录 什么是性能测试?性能测试的目的性能测试分类一般性能测试负载测试压力测试大数据量测试配置测试稳定性测试 性能测试术语虚拟用户并发及并发用户数响应时间每秒事务数吞吐量、吞吐率点击率性能计数器资源利用率 性能测试流程测试计划阶段测试设计阶段测试开发阶段测试…

微服务知识

1、概念 大型单体应用拆分成多个独立部署运行的微服务&#xff08;解决并发问题&#xff09;​​​​​​​ 2、特点 3、技术栈 4、微服务带来的问题 ​​​​​​​ 5、微服务的注册中心 服务注册与发现&#xff1a;微服务实例在启动时会向注册中心注册自己的信息&#xf…

Vmware 无法开启虚拟化解决方法

最近遇到了Vmware无法开启虚拟化的问题,已经解决,记录一下解决经过。 我遇到的情况是BIOS已经开启虚拟化,HV服务也停用了,但是Vmware仍然提示模块“VPMC”启动失败。网上的解决方案千篇一律,基本都是排查BIOS、停用Windows的虚拟化功能、停用HV主机服务、Vmware配置中关闭…

Ubuntu Linux 下安装和卸载cmake 3.28.2版本

一、安装cmake 1.首先&#xff0c;先从cmake官网下载cmake-3.28.2-linux-x86_64.tar.gz 2.用FinalShell 等文件上传工具&#xff0c;将这个压缩包上传到 虚拟机的某个路径去&#xff08;自选&#xff09; 3. cd /usr/local/bin/&#xff0c;然后创建cmake文件夹&#xff0c;…

国外知名的农业机器人公司

从高科技温室到云播种&#xff0c;农业机器人如何帮助农民填补劳动力短缺以及超市货架的短缺。 概要 “高科技农业”并不矛盾。当代农业经营更像是硅谷&#xff0c;而不是美国哥特式&#xff0c;拥有控制灌溉的应用程序、驾驶拖拉机的 GPS 系统和监控牲畜的带有 RFID 芯片的耳…