第11篇 2D绘图(一)绘制简单图形
導語
Qt中提供了強大的2D繪圖系統,可以使用相同的API在屏幕和繪圖設備上進行繪制,它主要基于QPainter、QPaintDevice和QPaintEngine這三個類。其中QPainter用來執行繪圖操作;QPaintDevice提供繪圖設備,它是一個二維空間的抽象,可以使用QPainter在其上進行繪制;QPaintEngine提供了一些接口,可以用于QPainter在不同的設備上進行繪制。
在繪圖系統中由QPainter來完成具體的繪制操作,QPainter類提供了大量高度優化的函數來完成GUI編程所需要的大部分繪制工作。QPainter可以繪制一切想要的圖形,從最簡單的一條直線到其他任何復雜的圖形,它還可以用來繪制文本和圖片。QPainter可以在繼承自QPaintDevice類的任何對象上進行繪制操作。
QPainter一般在一個部件的重繪事件(Paint Event)的處理函數paintEvent()中進行繪制,首先要創建QPainter對象,然后進行圖形的繪制,最后銷毀QPainter對象。
環境:Windows Xp + Qt 4.8.4+QtCreator 2.6.2
目錄
- 一、繪制一條直線
- 二、畫筆和畫刷
- 三、繪制弧線
正文
一、繪制一條直線
1.新建Qt Gui應用,項目名稱為painter_1,類信息界面不用修改,即類名為MainWindow,基類為QMainWindow。
2.在mainwindow.h文件中添加重繪事件處理函數的聲明:
protected: void paintEvent(QPaintEvent *);所有的繪制操作都要在這個函數里面完成。
3.下面到mainwindow.cpp文件中先需要添加頭文件包含:
#include <QPainter>然后添加該函數的定義:
void MainWindow::paintEvent(QPaintEvent *) {QPainter painter(this);painter.drawLine(QPointF(0, 0), QPointF(100, 100)); }這里首先為該部件創建了一個QPainter對象,用于后面的繪制。然后使用drawLine()函數繪制了一條線段,線段的起點為(0, 0),終點為(100, 100) ,這里的單位是像素。效果如下圖所示。
?
可以看到,在Qt窗口里面,(0, 0)點就是窗口的左上角,但這里是不包含外邊框的。而在MainWindow主窗口里面繪制時,左上角并不是指中心區域的左上角,而是包含了工具欄。
4.我們將光標定位到QPainter類名上,然后按下鍵盤上的F1按鍵,這時會自動跳轉到該類的幫助頁面。當然,也可以到幫助模式,直接索引查找該類名。在幫助里面我們可以看到很多相關的繪制函數,如下圖所示。
5.我們任意點擊一個函數名,就會跳轉到該函數的介紹段落。例如我們點擊drawEllipse()函數,就跳轉到了該函數的介紹處,上面還提供了一個例子。如下圖所示。我們可以直接將例子里面的代碼復制到paintEvent()函數里面,測試效果。
?
二、畫筆和畫刷
1.我們先將paintEvent()函數的內容更改如下:
void MainWindow::paintEvent(QPaintEvent *) {QPainter painter(this);QPen pen; //畫筆pen.setColor(QColor(255, 0, 0));QBrush brush(QColor(0, 255, 0, 125)); //畫刷painter.setPen(pen); //添加畫筆painter.setBrush(brush); //添加畫刷painter.drawRect(50, 50, 200, 100); //繪制矩形 }這里分別新建了一個畫筆QPen,和畫刷QBrush。其中畫筆使用了setColor()函數為其設置了顏色,而畫刷是在構建的時候直接為其設置的顏色。這里的顏色都是使用的QColor類提供的,里面如果是三個參數,那么分別是紅、綠、藍分量的值,也就是經常說的rgb,取值范圍都是0-255,比如這里的(255, 0, 0)就表明紅色分量為255,其他分量為0,那么出來就是紅色。如果是四個參數,最后一個參數alpha是設置透明度的,取值范圍也是0-255,0表示完全透明,而255表示完全不透明。
然后我們將畫筆和畫刷設置到了painter上,并使用drawRect()繪制了一個矩形,其左上角頂點在(50, 50),寬為200,高為100。運行程序,效果如下圖所示。
?
2.畫筆還有許多其他的設置,可以查看該類的幫助文檔。例如,可以使用pen.setStyle()來設置畫筆樣式,可用的畫筆樣式如下圖所示。
?
3.畫刷也有很多其他設置,這個也可以查看其幫助文檔。在Qt中為畫刷提供了一些可用的樣式,可以使用setStyle()函數來設置。如下圖所示。
這里面包含了漸變填充效果,這個會在下一節講到。
4.下面我們寫一個簡單的例子演示一下。將paintEvent()函數更改如下:
void MainWindow::paintEvent(QPaintEvent *) {QPainter painter(this);QPen pen(Qt::DotLine);QBrush brush(Qt::blue);brush.setStyle(Qt::HorPattern);painter.setPen(pen);painter.setBrush(brush);painter.drawRect(50,50,200,200); }這里的顏色使用了Qt預定義的顏色,可以在幫助中索引Qt::GlobalColor關鍵字查看。如下圖所示。
現在運行程序,效果如下圖所示。
?
三、繪制弧線
為了幫助大家學習,這里再舉一個繪制弧線的例子,其實在幫助文檔中已經給出了這個例子。如下圖所示。
我們將paintEvent()函數更改如下:
void MainWindow::paintEvent(QPaintEvent *) {QRectF rectangle(10.0, 20.0, 80.0, 60.0); //矩形int startAngle = 30 * 16; //起始角度int spanAngle = 120 * 16; //跨越度數QPainter painter(this);painter.drawArc(rectangle, startAngle, spanAngle); }這里要說明的是,畫弧線時,角度被分成了十六分之一,就是說,要想為30度,就得是30*16。它有起始角度和跨度,還有位置矩形,要想畫出自己想要的弧線,就要有一定的幾何知識了。這里就不再祥述。
結語
這一節我們只是簡單介紹了一下怎么使用QPainter在窗口界面上進行繪制,還涉及到了畫筆、畫刷,以及使用幫助文檔的一些內容。如果要更加系統、詳細的學習這些基礎知識,可以查看《Qt Creator快速入門》的第10章。
總結
以上是生活随笔為你收集整理的第11篇 2D绘图(一)绘制简单图形的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dubbo Failed to chec
- 下一篇: 《Mysql》必知必会读书笔记