QPainterPath 不規則提示框

2022-01-30 12:43:34 字數 3161 閱讀 7484

currentposition()是最後一次繪製後的「結束點」(或初始點),使用moveto()移動currentposition()而不會新增任何元素。

qpainterpath ​合併:

1、方法1:connectpath合併成乙個路徑,從第乙個路徑的最後乙個點鏈結一條直線到第二個路徑

2、方法2:addpath新增乙個新路徑作為子閉合路徑

測試截圖如下:

圖1 addpath演示

圖2 connectpath演示

上**:

準備工作,設定視窗背景透明、置頂、無邊框

setwindowflags(qt::framelesswindowhint | qt::windowstaysontophint); setattribute(qt::wa_translucentbackground);

​qpainterpath rectpath;

rectpath.moveto(50, 50);

rectpath.arcto(0, 0, 50 * 2, 50 * 2, 180, 270);  

繪製四分之三橢圓,arcto引數含義:前兩個引數表示橢圓外接舉行左上定點座標​,第三和第四引數表示橢圓的寬和高,四五個引數表示繪製起始角度,引數六表示繪製總角度

qpainterpath rectpath2 = rectpath; 

複製乙個新的閉合路徑​,並偏移指定距離

rectpath2.translate(100, 100);   

rectpath2.connectpath(rectpath);  連線兩個閉合路徑

qlineargradient linear(rect().topleft(),

rect().bottomright());  構造乙個刷子,設定刷子起始位置

linear.setcolorat(0,

qt::red); 

linear.setcolorat(0.5,

qt::green);  

linear.setcolorat(1,

qt::blue);   設定指定位置刷子顏色

painter.setpen(qpen(qcolor(255, 255, 255, 0), 0,

qt::solidline,  qt::flatcap,

qt::roundjoin));  設定畫筆型別

painter.setbrush(linear);  

painter.fillrect(rect(),

qt::gray);   

填充視窗背景色 方便觀察(實際開發中以白色為宜)

painter.drawpath(rectpath); 

使用addpath/connectpath方式時 

該行**不需要,因為該路徑已經被合併到rectpath2

painter.drawpath(rectpath2);繪製制定閉合路徑

不規則提示框如下

圖3不規則提示框

**如下

1 qpainter painter(this);2

3qpainterpath rectpath;

45 rectpath.addroundrect(qrect(rect().width() / 8, rect().height() / 2 , rect().width() / 2, rect().height() / 2), 10

); 67

qpainterpath tripath;

89 tripath.moveto(0, 0

);

1011 tripath.lineto(rect().width() / 4, rect().height() / 2

);

1213 tripath.lineto(rect().width() / 8 * 3, rect().height() / 2

);14

15 tripath.lineto(0, 0

);

1617

rectpath.addpath(tripath); 新增子閉合路徑

1819

qlineargradient linear(rect().topleft(), rect().bottomright());

2021 linear.setcolorat(0

, qt::red);

2223 linear.setcolorat(0.5

, qt::green);

2425 linear.setcolorat(1

, qt::blue);

2627 painter.setpen(qpen(qcolor(255, 255, 255, 0), 0

, qt::solidline, qt::flatcap, qt::roundjoin));

2829

painter.setbrush(linear);

3031

painter.fillrect(rect(), qt::gray);

3233 painter.drawpath(rectpath);

view code

最終效果​

圖4效果圖

圖5ui布局

​rectpath.addroundrect(qrect(rect().width() / 8,

rect().height() / 2

, rect().width() / 8 * 7, rect().height() / 2),

10);

不規則遮罩

不規則遮罩用不規則png去做遮罩,但是需要加個filter 對乙個displayobject應用乙個不規則遮罩可以有兩種方法 displayobjecta為被遮罩物件 displayobjectb是遮罩物件 1.用於做遮罩的displayobjectb用其graphic 畫出不規則的圖形,然後被遮罩...

MFC不規則視窗

直接在onpaint 函式裡新增語句 setwindowlong m hwnd,gwl exstyle,getwindowlong m hwnd,gwl exstyle ws ex layered setlayeredwindowattributes rgb 255,255,255 0,lwa co...

不規則瀑布流

封裝的layout import import protocol waterlayoutdelegate required cgsize collectionview uicollectionview collectionview layout uicollectionviewlayout coll...