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::LinearGradientPattern、Qt::RadialGradientPattern或者Qt::ConicalGradientPattern之一時才有效。漸變可以由QGradient對象表示。Qt 提供了三種漸變:QLinearGradient、QConicalGradient和QRadialGradient,它們都是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)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#注册表常用操作
- 下一篇: IDEA中一些快捷键及设置