在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ C/ QPainter(續(xù))
Qt 容器和算法拾遺
自定義 model 之一
反走樣
Hello, world!
Qt 容器類之關聯(lián)存儲容器
QStringListModel
拖放技術之一
狀態(tài)欄
QTreeWidget
拖放技術之二
通用算法
event()
Qt 學習之路(18): Qt 標準對話框之 QInputDialog
Qt 容器類之遍歷器和隱式數(shù)據共享
QListWidget
Meta-Object 系統(tǒng)
事件接收與忽略
Qt 學習之路(tip): parent 參數(shù)
Qt 標準對話框之 QColorDialog
QPainter(續(xù))
國際化(下)
漸變填充
自定義委托
創(chuàng)建 shared library
model-view 架構
Graphics View Framework
自定義拖放數(shù)據對象
QSortFilterProxyModel
國際化(上)
組件布局
自定義 Model 之三
事件過濾器
QDirModel
Hello, world!(續(xù))
Qt 標準對話框之 QFileDialog
自定義 model 之二
深入了解信號槽
坐標變換
剪貼板操作
QTableWidget
QByteArray 和 QVariant
創(chuàng)建一個對話框(下)
Qt 學習之路(32): 一個簡易畫板的實現(xiàn)(Graphics View)
文本文件讀寫
自定義事件
編寫跨平臺的程序
MainWindow
初探信號槽
Qt 學習之路(17): Qt 標準對話框之 QMessageBox
繪圖設備
菜單和工具條(續(xù))
二進制文件讀寫
QString
事件(event)
菜單和工具條
QPainter
Qt 容器類之順序存儲容器
進程間交互
API 文檔的使用
創(chuàng)建一個對話框(上)
一個簡易畫板的實現(xiàn)(QWidget)

QPainter(續(xù))

過去一天沒有接上上章的東西,今天繼續(xù)?。?/p>

首先還是要先把上次的代碼拿上來。

void PaintedWidget::paintEvent(QPaintEvent *event) 
{ 
        QPainter painter(this); 
        painter.drawLine(80, 100, 650, 500); 
        painter.setPen(Qt::red); 
        painter.drawRect(10, 10, 100, 400); 
        painter.setPen(QPen(Qt::green, 5)); 
        painter.setBrush(Qt::blue); 
        painter.drawEllipse(50, 150, 400, 200); 
}

上次我們說的是 Qt 繪圖相關的架構,以及 QPainter 的建立和 drawXXXX 函數(shù)。可以看到,基本上代碼中已經設計到得函數(shù)還剩下兩個:setPen()和 setBrush()?,F(xiàn)在,我們就要把這兩個函數(shù)講解一下。

Qt 繪圖系統(tǒng)提供了三個主要的參數(shù)設置,畫筆(pen)、畫刷(brush)和字體(font)。這里我們要說明的是畫筆和畫刷。

所謂畫筆,是用于繪制線的,比如線段、輪廓線等,都需要使用畫筆繪制。畫筆類即 QPen,可以設置畫筆的樣式,例如虛線、實現(xiàn)之類,畫筆的顏色,畫筆的轉折點樣式等。畫筆的樣式可以在創(chuàng)建時指定,也可以由 setStyle()函數(shù)指定。畫筆支持三種主要的樣式:筆帽(cap),結合點(join)和線形 (line)。這些樣式具體顯示如下(圖片來自 C++ GUI Programming with Qt4, 2nd Edition):

http://wiki.jikexueyuan.com/project/learn-road-qt/images/37.png" alt="" />

上圖共分成三行:第一行是 Cap 樣式,第二行是 Join 樣式,第三行是 Line 樣式。QPen 允許你使用 setCapStyle()、setJoinStyle()和 setStyle()分別進行設置。具體請參加 API 文檔。

所謂畫刷,主要用來填充封閉的幾何圖形。畫刷主要有兩個參數(shù)可供設置:顏色和樣式。當然,你也可以使用紋理或者漸變色來填充圖形。請看下面的圖片(圖片出自 Qt API 文檔):

http://wiki.jikexueyuan.com/project/learn-road-qt/images/38.png" alt="" />

這里給出了不同 style 的畫刷的表現(xiàn)。同畫筆類似,這些樣式也可用通過一個 enum 進行設置。

明白了這些之后我們再來看看我們的代碼。首先,我們直接使用 drawLine()函數(shù),由于沒有設置任何樣式,所以使用的是默認的1px,,黑色,solid 樣式畫了一條直線;然后使用 setPen()函數(shù),將畫筆設置成 Qt::red,即紅色,畫了一個矩形;最后將畫筆設置成綠色,5px,畫刷設置成藍色,畫了一個橢圓。這樣便顯示出了我們最終的樣式:

http://wiki.jikexueyuan.com/project/learn-road-qt/images/39.png" alt="" />

另外要說明一點,請注意我們的繪制順序,首先是直線,然后是矩形,最后是橢圓。這樣,因為橢圓是最后畫的,因此在最上方。

在我們學習 OpenGL 的時候,肯定聽過這么一句話:OpenGL 是一個狀態(tài)機。所謂狀態(tài)機,就是說,OpenGL 保存的只是各種狀態(tài)。怎么理解呢?比如,你把顏色設置成紅色,那么,直到你重新設置另外的顏色,它的顏色會一直是紅色。QPainter 也是這樣,它的狀態(tài)不會自己恢復,除非你使用了各種 set函數(shù)。因此,如果在上面的代碼中,我們在橢圓繪制之后再畫一個橢圓,它的樣式還會是綠色5px 的輪廓和藍色的填充,除非你顯式地調用了 set 進行更新。這可能是繪圖系統(tǒng)較多的實現(xiàn)方式,因為無論是OpenGL、QPainter 還是 Java2D,都是這樣實現(xiàn)的(DirectX 不大清楚)。

本文出自 “豆子空間” 博客,請務必保留此出處 http://devbean.blog.51cto.com/448512/194031