qt 設定視窗圓角

2021-07-11 08:37:37 字數 1852 閱讀 3842

最近在用qss做介面美化的工作,發現乙個問題就是qss不能對頂級視窗設定邊角圓弧,於是得另闢蹊徑。據網上搜尋可得到的方法我實現了三種:  

[cpp]view plain

copy

setwindowflags(qt::framelesswindowhint);  

qbitmap bmp(this

->size());  

bmp.fill();  

qpainter p(&bmp);  

//    p.setpen(qt::nopen);

//    p.setbrush(qt::black);

p.setrenderhint(qpainter::antialiasing);  

20, 20); //四個角都是圓弧

//只要上邊角圓弧

intarcr = 20;  

qrect rect = this

->rect();  

qpainterpath path;  

//逆時針

path.moveto(arcr, 0);  

path.arcto(0, 0, arcr * 2, arcr * 2, 90.0f, 90.0f);  

path.lineto(0, rect.height());  

path.lineto(rect.width(), rect.height());  

path.lineto(rect.width(), arcr);  

path.arcto(rect.width() - arcr * 2, 0, arcr * 2, arcr * 2, 0.0f, 90.0f);  

path.lineto(arcr, 0);  

p.drawpath(path);  

p.fillpath(path, qbrush(qt::red)); //arm和windows平台沒有這行**將顯示乙個透明的空空的框

setmask(bmp);   2

2.建構函式中

[cpp]view plain

copy

setattribute(qt::wa_translucentbackground, 

true

);  

setwindowflags(qt::window | qt::framelesswindowhint  

| qt::windowsystemmenuhint | qt::windowminimizebuttonhint  

| qt::windowmaximizebuttonhint);  

過載paintevent 

[cpp]view plain

copy

qpainter p(

this

);  

p.drawroundedrect(0, 0, width() - 1, height() - 1, 20, 20);  

3.背景

[cpp]view plain

copy

qpixmap pixmap(

":/images/*.png"

);  

setmask(pixmap.mask());  

qpalette palette;  

palette.setbrush(qpalette::background, qbrush( pixmap ) );  

setpalette(palette);  

resize( pixmap.size() );  

setmask(pixmap.mask());  

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

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

QT圓角視窗

以前寫的qt圓角都是在paintevent中繪製圓角背景,但是如果圓角附近需要放控制項,控制項就會因為自己的重繪而跑到圓角的外面去了,還有一種辦法就是設定setmask,自己控制 需要顯示,不需要顯示,bmp填充為乙個黑色圓角矩形,就能讓視窗的可見區域侷限於圓角矩形內,即使控制項越界也不會顯示出來。...

QT實現視窗圓角

實現上邊角圓弧 setwindowflags qt framelesswindowhint qbitmap bmp this size bmp.fill qpainter p bmp p.setpen qt nopen p.setbrush qt black p.setrenderhint qpai...