Qt 繪圖——基本繪圖

Qt 中提供了強大的 2D 繪圖系統,可以使用相同的 API 在屏幕和繪圖設備上進行繪製,它主要基於QPainter、QPaintDevice 和 QPaintEngine 這三個類。

QPainter 用於執行繪圖操作,其提供的 API 在 GUI 或 QImage、QOpenGLPaintDevice、QWidget 和QPaintDevice 顯示圖形(線、形狀、漸變等)、文本和圖像。
QPaintDevice 不直接繪製物理顯示畫面,而利用邏輯界面的中間媒介。例如,繪製矩形圖形時,爲了將對象繪製到 QWidget、QGLPixelBuffer、QImage、QPixmap、QPicture 等多種界面中間,必須使用 QPaintDevice。
QPaintEngine 提供了一些接口,可用於 QPainter 在不同的設備上進行繪製。

基本繪圖

1、paintEvent(QPaintEvent *event)

實現該事件函數的重寫

void Widget::paintEvent(QPaintEvent *event)
{
    繪圖的實現代碼
}
2、繪製文本
//繪製文本
QPainter painter(this);
// 設置畫筆顏色
painter.setPen(QColor(0, 160, 230));
// 設置字體:微軟雅黑、點大小50、斜體
QFont font;
font.setFamily("Microsoft YaHei");
font.setPointSize(50);//字號
font.setItalic(true);//斜體
painter.setFont(font);//設置字體
// 繪製文本
painter.drawText(rect(), Qt::AlignCenter, "哈哈");
3、繪製直線
//繪製直線
// 反走樣,防止出現鋸齒狀線條 painter.setRenderHint(QPainter::Antialiasing, true);
// 設置畫筆顏色
painter.setPen(QColor(0, 160, 230));
// 繪製直線 兩個參數,起點座標和重點座標
//QPoint是點的值是int型,QPointF的值是float型
painter.drawLine(QPointF(0, height()), QPointF(width() / 2, height() / 2));
4、繪製矩形

//矩形
// 反走樣 painter.setRenderHint(QPainter::Antialiasing, true);
// 設置畫筆顏色、寬度
painter.setPen(QPen(QColor(0, 160, 230), 2));
// 設置畫刷顏色
painter.setBrush(QColor(255, 160, 90));
//參數依次順序爲 x、y、w、h,是指區域從 x 爲 50,y 爲 50 的座標點起,
//寬度爲 160,高度爲 100 的矩形
painter.drawRect(50, 50, 160, 100);


#####5、繪製弧形

//弧形
//畫弧線時,角度被分成了十六分之一,就是說,如果要 30 度,就需是 30*16。
//它有起始角度和跨度,還有位置矩形,所以,要想畫出自己想要的弧線,
//就需要大概估算出各個參數的預估值
// 矩形
QRectF rect(90.0, 90.0, 80.0, 90.0);
// 起始角度
int startAngle = 30 * 16;
// 跨越度數
int spanAngle = 120 * 16;
// 反走樣
painter.setRenderHint(QPainter::Antialiasing, true);
// 設置畫筆顏色、寬度
painter.setPen(QPen(QColor(0, 160, 230), 2));
// 繪製弧線
painter.drawArc(rect, startAngle, spanAngle);


#####6、繪製橢圓

//繪製橢圓
// 反走樣 painter.setRenderHint(QPainter::Antialiasing, true);
// 設置畫筆顏色、寬度
painter.setPen(QPen(QColor(0, 160, 230), 2));
// 繪製橢圓
painter.drawEllipse(QPointF(120, 60), 50, 20);
// 設置畫刷顏色
painter.setBrush(QColor(255, 160, 90));
// 繪製圓
painter.drawEllipse(QPointF(120, 140), 40, 40);

//繪製橢圓和圓形,都是調用 drawEllipse() 接口,
//如果爲橢圓的時候,後面兩個參數不一樣,圓形則相同。
//首先我們來看第一個參數 QPointF
//是指橢圓的中心點相對當前窗體 QPoint(0, 0) 點的位置,
//後面的參數指橢圓的 x 軸及 y 軸的半徑。


#####7、繪製多邊形

//多邊形
//定義一個個座標點的位置,這裏有四個點,分別爲:QPointF(30, 40)、QPointF(60, 150)、
//QPointF(150, 160)、 QPointF(220, 100),
//然後調用 drawPolygon() 將各個點連接起來,繪製爲多邊形。

// 反走樣
painter.setRenderHint(QPainter::Antialiasing, true);
// 設置畫筆顏色
painter.setPen(QColor(0, 160, 230));
// 各個點的座標
static const QPointF points[4] = {QPointF(30, 40), QPointF(60, 150), QPointF(150, 160), QPointF(220, 100)};
// 繪製多邊形
painter.drawPolygon(points, 4);


#####8、繪製圖片

//繪製圖片
//drawPixmap() 來繪製圖片,我們可以指定圖片繪製的區域 QRect,
//這裏爲整個界面的區域,當界面伸縮的時候,圖片也會跟着伸縮。
// 反走樣
painter.setRenderHint(QPainter::Antialiasing, true);
// 繪製圖標
painter.drawPixmap(rect(), QPixmap(":/Images/logo"));

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章