通過maskwidget來實現,原理如下:
1. 設定要遮擋的窗體(一般是主視窗);
2. 設定目標視窗,並繫結該視窗的顯示事件,一旦目標顯示,陰影視窗就顯示;反則同樣;
3.完成陰影效果。
據觀察存在一定問題,目標視窗的父視窗問題,工作列會有兩個視窗圖示如
直接插入**:
maskwidget.h
#ifndef maskwidget_h
#define maskwidget_h
#include class cmaskwidget : public qwidget
;#endif // maskwidget_h
maskwidget.cpp
#include "maskwidget.h"
cmaskwidget* cmaskwidget::getinstance()
} return m_pmask;}
void cmaskwidget::uninstance() }}
void cmaskwidget::setmainwidget(qwidget *pwidgetmasked)}
void cmaskwidget::setdialognames(const qstringlist &lstwidgetnames)}
void cmaskwidget::setopacity(float fopacity)
void cmaskwidget::paintevent(qpaintevent *event)
void cmaskwidget::showevent(qshowevent* event)
qwidget::showevent(event);}
bool cmaskwidget::eventfilter(qobject *obj, qevent *event)
} else if (qevent::hide == event->type()) }
return qwidget::eventfilter(obj, event);}
cmaskwidget::cmaskwidget(qwidget* wgt /* = nullptr */)
cmaskwidget::~cmaskwidget()
呼叫:
cmaskwidget* maskwidget = cmaskwidget::getinstance();
maskwidget->setparent(this);
maskwidget->setmainwidget(this);
maskwidget->setdialognames(qstringlist() << "cbonusfornewuserdlg");
m_pdlgbonusfornewuser = new cbonusfornewuserdlg(this);
m_pdlgbonusfornewuser->installeventfilter(maskwidget);
QT 設定視窗陰影,設定視窗圓角
qt開發過程中,新增過自定義標題欄後,因為設定了 setwindowflags qt framelesswindowhint 屬性,widget介面後面陰影沒有了。現在使用paint的方法繪製陰影和視窗圓角,一方面能設定陰影,一方面可解決設定的視窗圓角後,仍殘留四個小角的問題。廢話不說 上 先設定屬...
Qt 視窗設定背景
1.方法一 qpalette palette palette.setbrush qpalette background,qbrush qpixmap images background.png scaled this size this setpalette palette 2.方法二this se...
Qt 設定視窗背景
環境 qt6.0 參考 qt 設定視窗背景有三種方式 使用 qpalette 設定背景 實現 paintevent,使用 qpainter 繪製背景 使用 qss 設定。其中,使用 qss 設定視窗背景容易出現問題,原因是口使用qss設定背景之後,若子部件不使用同樣的方式來設定,預設則會繼承父視窗的...