<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                #(25):畫刷和畫筆 前面一章我們提到,Qt 繪圖系統定義了兩個繪制時使用的關鍵屬性:畫刷和畫筆。前者使用`QBrush`描述,大多用于填充;后者使用`QPen`描述,大多用于繪制輪廓線。 `QBrush`定義了`QPainter`的填充模式,具有樣式、顏色、漸變以及紋理等屬性。 畫刷的`style()`定義了填充的樣式,使用`Qt::BrushStyle`枚舉,默認值是`Qt::NoBrush`,也就是不進行任何填充。我們可以從下面的圖示中看到各種填充樣式的區別: [![](https://box.kancloud.cn/2015-12-29_5682324ee6aa3.png)](http://files.devbean.net/images/2012/11/brush-fill-pattern.png) 畫刷的`color()`定義了填充模式的顏色。這個顏色可以是 Qt 預定義的顏色常量,也就是`Qt::GlobalColor`,也可以是任意`QColor`對象。 畫刷的`gradient()`定義了漸變填充。這個屬性只有在樣式是`Qt::LinearGradientPattern`、`Qt::RadialGradientPattern`或者`Qt::ConicalGradientPattern`之一時才有效。漸變可以由`QGradient`對象表示。Qt 提供了三種漸變:`QLinearGradient`、`QConicalGradient`和`QRadialGradient`,它們都是`QGradient`的子類。我們可以使用如下代碼片段來定義一個漸變的畫刷: ~~~ QRadialGradient gradient(50, 50, 50, 50, 50); gradient.setColorAt(0, QColor::fromRgbF(0, 1, 0, 1)); gradient.setColorAt(1, QColor::fromRgbF(0, 0, 0, 0)); 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 函數指定,完全取決于你的習慣,例如: ~~~ QPainter painter(this); QPen pen(Qt::green, 3, Qt::DashDotLine, Qt::RoundCap, Qt::RoundJoin); painter.setPen(pen); ~~~ 等價于 ~~~ QPainter painter(this); QPen pen; // creates a default pen pen.setStyle(Qt::DashDotLine); pen.setWidth(3); pen.setBrush(Qt::green); pen.setCapStyle(Qt::RoundCap); pen.setJoinStyle(Qt::RoundJoin); painter.setPen(pen); ~~~ 使用構造函數的優點是代碼較短,但是參數含義不明確;使用 set 函數則正好反過來。 默認的畫筆屬性是純黑色,0 像素,方形筆帽(`Qt::SquareCap`),斜面型連接(`Qt::BevelJoin`)。 下面是畫筆樣式的示例: [![](https://box.kancloud.cn/2015-12-29_5682324f0bdbe.png)](http://files.devbean.net/images/2012/11/pen-style.png) 你也可以使用`setDashPattern()`函數自定義樣式,例如如下代碼片段: ~~~ QPen pen; QVector<qreal> dashes; qreal space = 4; dashes << 1 << space << 3 << space << 9 << space << 27 << space << 9 << space; pen.setDashPattern(dashes); ~~~ 筆帽定義了畫筆末端的樣式,例如: [![](https://box.kancloud.cn/2015-12-29_5682324f244c1.png)](http://files.devbean.net/images/2012/11/cap-style.png) 他們之間的區別是,`Qt::SquareCap`是一種包含了最后一個點的方形端點,使用半個線寬覆蓋;`Qt::FlatCap`不包含最后一個點;`Qt::RoundCap`是包含最后一個點的圓形端點。具體可以參考下面的示例(出自《C++ GUI Programming with Qt 4, 2nd Edition》): [![](https://box.kancloud.cn/2015-12-29_5682324f34010.png)](http://files.devbean.net/images/2012/11/cap-style-2.png) 連接樣式定義了兩條線連接時的樣式,例如: [![](https://box.kancloud.cn/2015-12-29_5682324f45830.png)](http://files.devbean.net/images/2012/11/join-style.png) 同樣,可以參考下面圖示來理解這幾種連接樣式的細節(出自《C++ GUI Programming with Qt 4, 2nd Edition》): [![](https://box.kancloud.cn/2015-12-29_5682324f67ae1.png)](http://files.devbean.net/images/2012/11/join-style-2.png) 注意,我們前面說了,`QPainter`也是一個狀態機,這里我們所說的這些屬性都是處于這個狀態機之中的,因此,我們應該記得是否要將其保存下來或者是重新構建。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看