91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

QT繪圖技術paintEvent 漸變色技術

發布時間:2020-07-19 06:08:05 來源:網絡 閱讀:1358 作者:WZM3558862 欄目:編程語言

  前面說了有關反走樣的相關知識,下面來說一下漸變。漸變是繪圖中很常見的一種功能,它是利用顏色插值使得兩個或更多顏色之間能夠平滑過渡,簡單來說就是可以把幾種顏色混合在一起,讓它們能夠自然地過渡,而不是一下子變成另一種顏色。它們常被用來創建二維圖形的三維效果。漸變的算法比較復雜,寫得不好的話效率會很低,好在很多繪圖系統都內置了漸變的功能,Qt也不例外。漸變一般是用在填充里面的,所以,漸變的設置就是在QBrush里面。 
        Qt支持三種類型的漸變,分別是線性漸變(QLinearGradient)、輻射漸變(QRadialGradient)、錐形漸變(QConicalGradient)。 

        1、線性漸變由兩個控制點定義,連接這兩點的線上設置一系列的顏色斷點。這些斷點被鉗位到浮點數0和1之間,0對應第一個控制點,1對應第二個控制點,兩個指定斷點之間的顏色由線性插值得出。如代碼(以下給出 paintEvent()函數里面的代碼 ):

void MyWidget::paintEvent(QPaintEvent *event)
{ QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); QLinearGradient linearGradient(60, 50, 200, 200); 
 linearGradient.setColorAt(0.2, Qt::white); 
 linearGradient.setColorAt(0.6, Qt::green); 
 linearGradient.setColorAt(1.0, Qt::black); 
 painter.setBrush(QBrush(linearGradient)); 
 painter.drawEllipse(50, 50, 200, 150);
}

        這里0對應第一個控制點(60,50),1對應第二個控制點(200,200 ),之間用了三個顏色插值,效果如下圖: 

QT繪圖技術paintEvent 漸變色技術

 

    2、輻射漸變由一個中心點、半徑、一個焦點,以及顏色斷點控制。中心點和半徑定義一個圓。顏色從焦點向外擴散,焦點可以是中心點或者圓內的其他點。代碼如下: 

void MyWidget::paintEvent(QPaintEvent *event)
{ QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); 
 QRadialGradient radialGradient(130, 130, 100, 130, 130); radialGradient.setColorAt(0.0, Qt::white); radialGradient.setColorAt(0.6, Qt::black); radialGradient.setColorAt(0.8, Qt::green); painter.setBrush(QBrush(radialGradient)); painter.drawEllipse(50, 50, 200, 150);
}

        這里QRadialGradient radialGradient(130, 130, 100, 130, 130);中前兩個參數指定了中心點,第三個參數指定了半徑,后兩個參數指定了焦點,這里中心點和焦點是同一個點,所以看起來效果是從中心點向外均勻擴散。效果如下:

QT繪圖技術paintEvent 漸變色技術

 

        3、錐形漸變由一個中心點和一個角度定義,顏色從x軸正向偏轉一個角度開始,按給定顏色斷點旋轉擴散。代碼如下:

void MyWidget::paintEvent(QPaintEvent *event)
{ QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); 
 QConicalGradient conicalGradient(150,150, 90); conicalGradient.setColorAt(0.2, Qt::white); conicalGradient.setColorAt(0.6, Qt::green); conicalGradient.setColorAt(0.8, Qt::black); painter.setBrush(QBrush(conicalGradient)); painter.drawEllipse(50, 50, 200, 150);
}

        這里定義(150,150 )為中心點,從x軸正向開始偏轉90度,然后按白綠黑旋轉擴撒,效果如下:

QT繪圖技術paintEvent 漸變色技術

 

        4、那么我們如何控制我們的線條也是漸變效果呢 ? 通常我們畫線是用畫筆來完成的,但是QPen是接收QBrush做參數的,也就是說,你可以利用一個QBrush創建一個QPen,這樣,QBrush所有的填充效果都可以用在畫筆上了!代碼如下:

 

void MyWidget::paintEvent(QPaintEvent *event)
{ QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); 
 QLinearGradient linearGradient(60, 50, 200, 200); 
 linearGradient.setColorAt(0.2, Qt::white); 
 linearGradient.setColorAt(0.6, Qt::green); 
 linearGradient.setColorAt(1.0, Qt::black); 
 painter.setPen(QPen(QBrush(linearGradient),5)); 
 painter.drawEllipse(50, 50, 200, 150);
}

         下來看看我們的畫線的漸變效果吧!

QT繪圖技術paintEvent 漸變色技術

 QT繪圖技術paintEvent 漸變色技術


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

qt te
AI

咸宁市| 中阳县| 淅川县| 托克托县| 宣威市| 武胜县| 阿合奇县| 麦盖提县| 南阳市| 南昌市| 沁水县| 五常市| 吉木萨尔县| 厦门市| 阿勒泰市| 东辽县| 新乡县| 连州市| 柏乡县| 界首市| 香格里拉县| 牙克石市| 丰顺县| 雅江县| 青龙| 读书| 双柏县| 板桥市| 西安市| 南乐县| 洪洞县| 中宁县| 确山县| 沙雅县| 陇西县| 云安县| 唐山市| 高青县| 资讯| 邯郸县| 定边县|