QT–创建蒙层

QT–创建蒙层QT 中添加蒙层 qt 蒙层

大家好,欢迎来到IT知识分享网。

提示:本文为学习内容,若有错误,请联系作者


前言

只管努力,其他的交给时间。


一、蒙层的作用

二、使用步骤

1…h文件

代码如下(示例):

#ifndef QBASEMASK_H #define QBASEMASK_H /新增蒙层/ #include <QWidget> class QBaseMask : public QWidget { 
      public: explicit QBaseMask(QWidget* parent = nullptr); ~QBaseMask(); /// @brief 显示窗体蒙板 static void ShowBaseMaskWindow(QWidget* parent, QString text = ""); /// @brief 关闭窗体蒙板 static void CloseBaseMaskWindow(); /// @brief 创建控件 static QWidget* CreateWidget(bool _isWindow); static QPointer<QWidget> ptr_widget; private: private: private slots: }; #endif // QBASEMASK_H 

2…cpp文件

代码如下(示例):

#include "qbasemask.h" #include <QLabel> #include <QProgressBar> #include <QGridLayout> #include <QPointer> #include <QDesktopWidget> #include <QApplication> QPointer<QWidget> QBaseMask::ptr_widget = Q_NULLPTR; QBaseMask::QBaseMask(QWidget* parent) : QWidget(parent) { 
      } QBaseMask::~QBaseMask() { 
      } QWidget* QBaseMask::CreateWidget(bool _isWindow) { 
      /// @brief 创建控件 auto proBar = new QProgressBar(); proBar->setRange(0, 0); proBar->setMaximumSize(300, 30); proBar->setTextVisible(false); //proBar->setStyleSheet("background-color: #19232D"); auto label = new QLabel(); label->setAttribute(Qt::WA_TranslucentBackground); label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); auto gridLayout = new QGridLayout(); gridLayout->setContentsMargins(0, 0, 0, 0); gridLayout->addWidget(proBar, 0, 0); gridLayout->addWidget(label, 0, 0); auto widget = new QWidget(); if (_isWindow) { 
      widget->setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint); widget->setWindowModality(Qt::ApplicationModal); } widget->setAttribute(Qt::WA_TranslucentBackground); //widget->setStyleSheet("background-color: rgb(128, 128, 128, 120)"); widget->setMinimumSize(300, 30); widget->setLayout(gridLayout); return widget; } void QBaseMask::ShowBaseMaskWindow(QWidget* parent, QString text) { 
      /// @brief 显示蒙板窗体 if (!ptr_widget) { 
      ptr_widget = CreateWidget(true); } if (ptr_widget->children().size() == 3) { 
      ((QLabel*)ptr_widget->children().at(2))->setText(text.isEmpty() ? text : text);//QBaseConfig::m_mask_hint } ptr_widget->setParent(parent, ptr_widget->windowFlags()); ptr_widget->setGeometry(0, 0, ptr_widget->minimumSize().width(), ptr_widget->minimumSize().height()); if (parent) { 
      ptr_widget->move(parent->mapToGlobal(QPoint(0, 0)) + QPoint((parent->width() - ptr_widget->width()) / 2, (parent->height() - ptr_widget->height()) / 2)); } else { 
      auto pDesk = QApplication::desktop(); ptr_widget->move((pDesk->width() - ptr_widget->width()) / 2, (pDesk->height() - ptr_widget->height()) / 2); } ptr_widget->show(); } void QBaseMask::CloseBaseMaskWindow() { 
      /// @brief 关闭蒙板窗体 if (ptr_widget) { 
      ptr_widget->setParent(Q_NULLPTR, ptr_widget->windowFlags()); ptr_widget->hide(); } } 

3.调用

void MainWindow::on_bt_FWDI_clicked() { 
      QBaseMask M_MASK; M_MASK.ShowBaseMaskWindow(this, "烧录中"); qDebug()<<"显示成功"; m_time.start(8000); } 

利用定时器关闭窗口

 QTimer m_time; connect(&m_time,&QTimer::timeout,[=] { 
      QBaseMask M_MASK; M_MASK.CloseBaseMaskWindow(); qDebug()<<"关闭显示"; m_time.stop(); }); 

4.效果

在这里插入图片描述


总结

善于总结,多进一步。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/136100.html

(0)
上一篇 2025-06-29 21:10
下一篇 2025-06-29 21:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信