Qt 中實現陰影視窗

2021-10-06 06:46:01 字數 2378 閱讀 2000

陰影視窗的實現方法一般有三種,

方法一是:在視窗的建構函式中設定視窗的屬性為:

setattribute(qt::wa_translucentbackground);

從而保證視窗不被繪製的部分透明化。接著重寫繪製函式paintevent(),

其**示例如下:

void qt_test::paintevent(qpaintevent *event)

qpainterpath path;

path.setfillrule(qt::windingfill);

path.addrect(10, 10,

this->width()-20,this->height()-20);

qpainter

painter(this);

painter.setrenderhint(qpainter::antialiasing, true);

painter.fillpath(path, qbrush(qt::white));

qcolor color(0, 0, 0,

50);

for(int i=0; i<10;

i++)

qpainterpath path;

path.setfillrule(qt::windingfill);

path.addrect(10-i,10-i,

this->width()-(10-i)*2, this->height()-(10-i)*2);

color.setalpha(150

painter.setpen(color);

painter.drawpath(path);

方法二:用代用陰影的背景實現

qt的視窗對於一般的視窗程式來說,已經完全夠用了。但有時候我們要求介面比較精美,或者還想自定義**之類的話,就需要自己定義視窗。這裡介紹一種簡單的自定義視窗的方法。

自定義樣式可以達到很多的自定義**的效果,但自定義樣式有時不能指定視窗的形狀,或者實現視窗的陰影效果(使用qt的qgraphicseffect定義陰影,但執行效率較低)。這樣的話可以過載視窗的paintevent函式實現自繪製視窗。

先準備一張有視窗陰影的背景圖,然後在paintevent函式裡面使用qpainterx繪製這張圖。

這裡將視窗類命名為graphicdialog

示例**如下:

class graphicdialog :

public qdialog

public:

graphicdialog(qwidget*parent=null,qt::windowflags

f = 0/* qt::framelesswindowhint*/);

~graphicdialog(void);

protected:

void paintevent(qpaintevent *);

qpixmap background;

在視窗類建構函式中:

setwindowflags(qt::framelesswindowhint); //無標題視窗

setattribute(qt::wa_translucentbackground);

background.load(":/images/dialogbackground");

在paintevent中

qpainter p(this);

p.drawpixmap(0, 0, rect().width(), rect().height(),

background);

方法三是通過qframe + qgraphicsdropshadoweffect的方式實現。

其**示例如下:

qframe *frame = new qframe(this);

frame->setstylesheet("qframe");

//設定圓角與背景透明

frame->setgeometry(5, 5, this->width() - 5,

this->height() - 5);//設定有效範圍框

qgraphicsdropshadoweffect *shadow_effect = new

qgraphicsdropshadoweffect(this);

shadow_effect->setoffset(0, 0);

shadow_effect->setcolor(qt::black);

shadow_effect->setblurradius(10);

frame->setgraphicseffect(shadow_effect);

this->setattribute(qt::wa_translucentbackground);

//若沒有效果,可能是設定了setcontentsmargins,調整這個函式的引數即可

QT筆記之實現陰影視窗

方法一 實現 在視窗建構函式中加入 setattribute qt wa translucentbackground 保證不被繪製上的部分透明 重寫void paintevent qpaintevent event void qt test paintevent qpaintevent event ...

qt 視窗帶陰影

qframe frame new qframe this ui.setupui this frame setstylesheet qframe 設定圓角與背景透明 frame setgeometry 5,5,this width 10,this height 10 設定有效範圍框 qgraphics...

QT 設定視窗陰影,設定視窗圓角

qt開發過程中,新增過自定義標題欄後,因為設定了 setwindowflags qt framelesswindowhint 屬性,widget介面後面陰影沒有了。現在使用paint的方法繪製陰影和視窗圓角,一方面能設定陰影,一方面可解決設定的視窗圓角後,仍殘留四個小角的問題。廢話不說 上 先設定屬...