qt制作蒙板简单来说就是放一个半透明的窗体在屏幕之上。
直接上代码:
.h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
protected slots:
void on_MaskClicked();
};
#endif // MAINWINDOW_H
.cpp文件
#include "mainwindow.h"
#include <QDebug>
#include <QPushButton>
#include <QProgressBar>
#include <QApplication>
#include <QHBoxLayout>
#include <QScreen>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QPushButton *m_btn=new QPushButton(tr("Mask"),this);
m_btn->show();
connect(m_btn,&QPushButton::clicked,this,&MainWindow::on_MaskClicked);
}
MainWindow::~MainWindow()
{
}
void MainWindow::on_MaskClicked()
{
QScreen *screen = QGuiApplication::primaryScreen(); //获取当前屏幕的大小
QRect mm = screen->availableGeometry();
int screen_width = mm.width();
int screen_height = mm.height();
QWidget *m_pMaskWgt = new QWidget(); //蒙板窗体
m_pMaskWgt->setWindowFlag(Qt::FramelessWindowHint);
QProgressBar* m_pUpdateBar = new QProgressBar(); //在蒙板的中心放一个进度条
m_pUpdateBar->setFixedWidth(400);
m_pUpdateBar->setRange(0, 110);
m_pUpdateBar->setValue(50);
QWidget *barWgt = new QWidget(m_pMaskWgt);
QHBoxLayout *barLayout = new QHBoxLayout(m_pMaskWgt);
barLayout->addStretch();
barLayout->addWidget(m_pUpdateBar);
barLayout->addStretch();
barLayout->setMargin(0);
barWgt->setLayout(barLayout);
QVBoxLayout *maskLayout = new QVBoxLayout(this);
maskLayout->addStretch();
maskLayout->addWidget(barWgt);
maskLayout->addStretch();
maskLayout->setMargin(0);
m_pMaskWgt->setLayout(maskLayout);
m_pMaskWgt->setWindowOpacity(0.7); //设置窗体透明度
m_pUpdateBar->setStyleSheet("QProgressBar{border-radius:5px;border:2px solid #66ccff;text-align:center;color: rgb(255, 85, 0);}QProgressBar::chunk{border-radius:5px;background:#66ccff}");
m_pMaskWgt->setFixedSize(screen_width, screen_height);
m_pMaskWgt->show();
}
运行效果图:
好了 Bye