日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

QPainter--画笔(QPen)和画刷(QBrush)

發布時間:2023/12/13 综合教程 31 生活家
生活随笔 收集整理的這篇文章主要介紹了 QPainter--画笔(QPen)和画刷(QBrush) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章轉載自:https://www.devbean.net/2012/11/qt-study-road-2-brush-pen/

前面一章我們提到,Qt 繪圖系統定義了兩個繪制時使用的關鍵屬性:畫刷和畫筆。前者使用QBrush描述,大多用于填充;后者使用QPen描述,大多用于繪制輪廓線。

QBrush定義了QPainter的填充模式,具有樣式、顏色、漸變以及紋理等屬性。

畫刷的style()定義了填充的樣式,使用Qt::BrushStyle枚舉,默認值是Qt::NoBrush,也就是不進行任何填充。我們可以從下面的圖示中看到各種填充樣式的區別:

畫刷的color()定義了填充模式的顏色。這個顏色可以是 Qt 預定義的顏色常量,也就是Qt::GlobalColor,也可以是任意QColor對象。

畫刷的gradient()定義了漸變填充。這個屬性只有在樣式是Qt::LinearGradientPatternQt::RadialGradientPattern或者Qt::ConicalGradientPattern之一時才有效。漸變可以由QGradient對象表示。Qt 提供了三種漸變:QLinearGradientQConicalGradientQRadialGradient,它們都是QGradient的子類。我們可以使用如下代碼片段來定義一個漸變的畫刷:

1 QRadialGradient gradient(50, 50, 50, 50, 50);
2 gradient.setColorAt(0, QColor::fromRgbF(0, 1, 0, 1));
3 gradient.setColorAt(1, QColor::fromRgbF(0, 0, 0, 0));
4  
5 QBrush brush(gradient);

當畫刷樣式是Qt::TexturePattern時,texture()定義了用于填充的紋理。注意,即使你沒有設置樣式為Qt::TexturePattern,當你調用setTexture()函數時,QBrush會自動將style()設置為Qt::TexturePattern

QPen定義了用于QPainter應該怎樣畫線或者輪廓線。畫筆具有樣式、寬度、畫刷、筆帽樣式和連接樣式等屬性。畫筆的樣式style()定義了線的樣式。畫刷brush()用于填充畫筆所繪制的線條。筆帽樣式capStyle()定義了使用QPainter繪制的線的末端;連接樣式joinStyle()則定義了兩條線如何連接起來。畫筆寬度width()widthF()定義了畫筆的寬。注意,不存在寬度為 0 的線。假設你設置 width 為 0,QPainter依然會繪制出一條線,而這個線的寬度為 1 像素。也就是說,畫筆寬度通常至少是 1 像素。

這么多參數既可以在構造時指定,也可以使用 set 函數指定,完全取決于你的習慣,例如:

1 QPainter painter(this);
2 QPen pen(Qt::green, 3, Qt::DashDotLine, Qt::RoundCap, Qt::RoundJoin);
3 painter.setPen(pen);

等價于

 1 QPainter painter(this);
 2 QPen pen;  // creates a default pen
 3  
 4 pen.setStyle(Qt::DashDotLine);
 5 pen.setWidth(3);
 6 pen.setBrush(Qt::green);
 7 pen.setCapStyle(Qt::RoundCap);
 8 pen.setJoinStyle(Qt::RoundJoin);
 9  
10 painter.setPen(pen);

使用構造函數的優點是代碼較短,但是參數含義不明確;使用 set 函數則正好反過來。

默認的畫筆屬性是純黑色,0 像素,方形筆帽(Qt::SquareCap),斜面型連接(Qt::BevelJoin)。

下面是畫筆樣式的示例:

你也可以使用setDashPattern()函數自定義樣式,例如如下代碼片段:

1  QPen pen;
2  QVector<qreal> dashes;
3  qreal space = 4;
4  
5  dashes << 1 << space << 3 << space << 9 << space
6         << 27 << space << 9 << space;
7  
8  pen.setDashPattern(dashes);

筆帽定義了畫筆末端的樣式,例如:

他們之間的區別是,Qt::SquareCap是一種包含了最后一個點的方形端點,使用半個線寬覆蓋;Qt::FlatCap不包含最后一個點;Qt::RoundCap是包含最后一個點的圓形端點。具體可以參考下面的示例(出自《C++ GUI Programming with Qt 4, 2nd Edition》):

連接樣式定義了兩條線連接時的樣式,例如:

同樣,可以參考下面圖示來理解這幾種連接樣式的細節(出自《C++ GUI Programming with Qt 4, 2nd Edition》):

注意,我們前面說了,QPainter也是一個狀態機,這里我們所說的這些屬性都是處于這個狀態機之中的,因此,我們應該記得是否要將其保存下來或者是重新構建。

總結

以上是生活随笔為你收集整理的QPainter--画笔(QPen)和画刷(QBrush)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。