大家好,欢迎来到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