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);2view code3qpainterpath 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);
最終效果
圖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...