在圖形設計當中,漸變效果一般指的是顏色的平滑過渡。QLinearGradient是Qt框架中提供的漸變類,可以用於填充封閉多邊形、矩形和橢圓形,以及線性填充窗口區域或QPainterPath。使用QLinearGradient可以輕鬆地創建漂亮的漸變效果。
一、QLinearGradient的基本用法
使用QLinearGradient可以創建線性漸變,主要是根據坐標系中的起點和終點確定漸變的方向,從而創建漸變。對於線性漸變,可以控制漸變的起點和終點,通過這兩個點控制漸變的方向和長度。
// 可以通過以下代碼創建一個從左上角到右下角的線性漸變 QLinearGradient linearGradient(QPoint(0, 0), QPoint(400, 400));
如果想要水平方向的漸變效果,可以通過設置終點的x坐標大於起點的x坐標來實現。
// 可以通過以下代碼創建一個水平方向的線性漸變 QLinearGradient linearGradient(QPoint(0, 200), QPoint(400, 200));
如果想要垂直方向的漸變效果,可以通過設置終點的y坐標大於起點的y坐標來實現。
// 可以通過以下代碼創建一個垂直方向的線性漸變 QLinearGradient linearGradient(QPoint(200, 0), QPoint(200, 400));
在創建完QLinearGradient對象之後,可以調用它的setColorAt()函數為漸變設置顏色。
// 可以通過以下代碼為漸變設置顏色 linearGradient.setColorAt(0.0, QColor(Qt::white)); linearGradient.setColorAt(1.0, QColor(Qt::black));
二、QLinearGradient的高級用法
QLinearGradient還提供了一些高級用法,主要是通過設置漸變的模式和擴散方式來擴展漸變的效果。
QGradient::Spread定義了漸變的擴散方式,它有以下幾種擴散方式:
- QGradient::Pad: 默認值,表示在漸變區域邊緣處不做處理,超出的部分保持原有顏色
- QGradient::Repeat: 對於超出漸變區域的部分,重複漸變中的顏色。
- QGradient::Reflect: 對於超出漸變區域的部分,鏡像反射漸變中的顏色。
// 可以通過以下代碼設置漸變的擴散方式 linearGradient.setSpread(QGradient::Repeat);
QGradient::CoordMode定義了坐標系中漸變的模式,它有以下幾種模式:
- QGradient::LogicalMode: 默認值,表示以QPainter繪製的坐標係為參考
- QGradient::StretchToDeviceMode: 表示以設備坐標係為參考
- QGradient::ObjectBoundingMode: 表示以對象邊界框為參考
// 可以通過以下代碼設置漸變的模式 linearGradient.setCoordinateMode(QGradient::ObjectBoundingMode);
同時,我們還可以將多個漸變對象連接起來,從而實現更加豐富的效果。
// 可以通過以下代碼連接多個漸變對象 QLinearGradient linearGradient1(QPoint(0, 0), QPoint(400, 400)); linearGradient1.setColorAt(0.0, QColor(Qt::white)); linearGradient1.setColorAt(1.0, QColor(Qt::black)); QLinearGradient linearGradient2(QPoint(0, 400), QPoint(400, 0)); linearGradient2.setColorAt(0.0, QColor(Qt::black)); linearGradient2.setColorAt(1.0, QColor(Qt::white)); QLinearGradient linearGradient3(QPoint(200, 0), QPoint(200, 400)); linearGradient3.setColorAt(0.0, QColor(255, 0, 0)); linearGradient3.setColorAt(0.5, QColor(0, 255, 0)); linearGradient3.setColorAt(1.0, QColor(0, 0, 255)); QLinearGradient linearGradient4(QPoint(0, 200), QPoint(400, 200)); linearGradient4.setColorAt(0.0, QColor(255, 0, 0)); linearGradient4.setColorAt(0.5, QColor(0, 255, 0)); linearGradient4.setColorAt(1.0, QColor(0, 0, 255)); QLinearGradient linearGradient5(QPoint(0, 0), QPoint(400, 0)); linearGradient5.setColorAt(0.0, QColor(Qt::white)); linearGradient5.setColorAt(1.0, QColor(Qt::black)); QLinearGradient linearGradient6(QPoint(0, 400), QPoint(400, 400)); linearGradient6.setColorAt(0.0, QColor(Qt::black)); linearGradient6.setColorAt(1.0, QColor(Qt::white));
三、使用QLinearGradient填充圖形
通過QLinearGradient和QPainter可以填充各種圖形,從而實現漸變效果。
// 可以通過以下代碼為矩形填充線性漸變 QPainter painter(this); painter.setBrush(QBrush(linearGradient)); painter.drawRect(QRect(0, 0, 400, 400));
也可以通過QPainterPath和setBrush函數為一個多邊形、封閉曲線來設置填充顏色和漸變效果。
// 可以通過以下代碼為一個多邊形設置漸變效果 QPainterPath path; path.moveTo(200, 0); path.lineTo(400, 400); path.lineTo(0, 400); path.lineTo(200, 0); painter.setBrush(QBrush(linearGradient)); painter.drawPath(path);
四、總結
使用QLinearGradient可以輕鬆創建漂亮的漸變效果,主要需要掌握以下知識:
- 創建漸變對象需要指定起點和終點坐標
- 可以通過setColorAt()函數為漸變對象設置顏色
- QGradient::Spread定義了漸變的擴散方式,QGradient::CoordMode定義了坐標系中漸變的模式
- 可以連接多個漸變對象來實現更加豐富的效果
- 可以通過QPainter和QPainterPath將漸變填充到圖形或路徑中
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/295632.html