嵌入式qt界面中,出现弹窗时,背景需要置灰色透明,禁用弹窗之外的点击事件,增强界面美观性及合理 性,实现Mask界面类如下文。
maskwin.h文件:
#ifndef MASKWIN_H #define MASKWIN_H #include <QWidget> class MaskWin : public QWidget { Q_OBJECT public: explicit MaskWin(QWidget *parent = 0); ~MaskWin(){} static MaskWin *GetInstance(); signals: public slots: private: static MaskWin *m_maskWin; }; #endif // MASKWIN_Hmaskwin.cpp文件:
#include "maskwin.h" MaskWin* MaskWin::m_maskWin = NULL; MaskWin* MaskWin::GetInstance() { if(NULL == m_maskWin) { m_maskWin = new MaskWin(); } return m_maskWin; } MaskWin::MaskWin(QWidget *parent) : QWidget(parent) { //设置窗口属性 setWindowFlags(Qt::Window|Qt::FramelessWindowHint |Qt::WindowSystemMenuHint| Qt::WindowMinimizeButtonHint|Qt::WindowMaximizeButtonHint); setWindowOpacity(0.3); //界面透明度,越小越透明 setStyleSheet("background-color:black"); setFixedSize(800,600); //嵌入式屏幕分辨率大小 hide(); }该界面使用单例模式,所以可以适用于任意交互、提示警告类弹窗界面背景。
使用步骤:
首先确定需要添加此背景的弹窗类,在该类的头文件中添加Mask界面类的头文件;其次查看弹窗类是否包含showEvent函数,如果没有就在弹窗类下重写该函数,然后再在showEvent函数中加入: MaskWin::GetInstance()->show();在弹窗显示的时候会运行showEvent函数,然后调用Mask界面类显示灰色透明背景。
在closeEvent函数中加入: MaskWin::GetInstance()->hide();最好hideEvent函数也加上,如果这两个函数也不存在,同2一样重写。
示例代码:
左边为原来的弹窗界面,右边的为添加该Mask界面类做背景。
