QT實現視窗圓角

2021-06-09 14:13:55 字數 1041 閱讀 4922

//**********實現上邊角圓弧**********

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); //四個角都是圓弧

//只要上邊角圓弧

int arcr = 10; //弧度

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);

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

setmask(bmp);

//**********實現上邊角圓弧**********

可以放在窗體的建構函式中,具體的**原理我也沒有詳細看,拿來主意,:-)。

原理應該是使用乙個bitmap來實現窗體繪畫,圓角是使用path路徑來逐步畫出來的。

**:一些畫圖原理可參考:

Qt 用Qt實現圓角視窗

實現該功能主要是呼叫qwidget的成員函式setmask.我們可以看到qt assistant介紹了兩種setmask方法,這裡我們採用第一種方法。也就是用qbitmap類例項來實現的方面。第二種方法需要自己繪製區域來實現。兩種方法都比較靈活。在dialog.cpp的建構函式中新增如下 setwi...

QT圓角視窗

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

qt 設定視窗圓角

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