Qpainter 可以在继续自 QPaintDevice 类的任何工具上进行绘制操作。
QPainter 也可以与 QPrinter 一起利用来打印文件和创建 PDF 文档。
这意味着常日可以用相同的代码在屏幕上显示数据,也可以天生打印形式的报告。

QPainter 一样平常在部件的绘图事宜 paintEvent() 中进行绘制,首先创建 QPainter 工具,然后进行图形的绘制,最后记得销毁 QPainter 工具。
当窗口程序须要升级或者重新绘制时,调用此成员函数。
利用 repaint()和 update() 后,调用函数 paintEvent()。

绘制文本

void MainWindow::paintEvent(QPaintEvent event) { Q_UNUSED(event); 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, "Qt");}

首先为该部件创建了一个 QPainter 工具,用于后面的绘制。
利用 setPen() 来设置画笔的颜色(淡蓝色)。
通过利用 QFont 来构建我们想要的字体,setFamily()设置字体为微软雅黑、setPointSize() 设置点大小30、setItalic() 设置斜体, 然后通过 setFont() 来设置字体,末了调用 drawText() 来实现文本的绘制,这里的 rect() 是指当前窗体的显示区域,Qt::AlignCenter 指文本居中绘制。

【领QT开拓教程学习资料,点击下方链接莬费领取↓↓,先码住不迷路~】

Qt 之图形QPainter 的基本绘图

点击→领取「链接」

绘制直线

void MainWindow::paintEvent(QPaintEvent event) { Q_UNUSED(event); QPainter painter(this); // 反走样 painter.setRenderHint(QPainter::Antialiasing, true); // 设置画笔颜色 painter.setPen(QColor(0, 160, 230)); // 绘制直线 painter.drawLine(QPointF(0, height()), QPointF(width() / 2, height() / 2));}

首先我们通过 setRenderHint() 来设置反走样,要么绘制出来的线条会涌现锯齿,调用 setPen() 来设置画笔颜色(淡蓝色)。
末了调用 drawLine() 来实现直线的绘制,个中 QPointF(0, height()) 是指直线的出发点坐标、QPointF(width() / 2, height() / 2) 是指直线的终点坐标。

绘制矩形

void MainWindow::paintEvent(QPaintEvent event) { Q_UNUSED(event); QPainter painter(this); // 反走样 painter.setRenderHint(QPainter::Antialiasing, true); // 设置画笔颜色、宽度 painter.setPen(QPen(QColor(0, 160, 230), 2)); // 设置画刷颜色 painter.setBrush(QColor(255, 160, 90)); painter.drawRect(50, 50, 160, 100);}

首先我们利用 setPen() 来设置画笔颜色(淡蓝色)、宽度(2 像素),用来设置矩形区域的边框。
然后利用setBrush() 来设置画刷颜色(橙色),用来添补矩形区域,末了调用 drawRect() 来实现矩形的绘制,个中参数依次顺序为 x、y、w、h,是指区域从 x 为 50,y 为 50 的坐标点起,宽度为 160,高度为 100 的矩形。

绘制弧线

void MainWindow::paintEvent(QPaintEvent event){ Q_UNUSED(event); // 矩形 QRectF rect(90.0, 90.0, 80.0, 90.0); // 起始角度 int startAngle = 30 16; // 超过度数 int spanAngle = 120 16; QPainter painter(this); // 反走样 painter.setRenderHint(QPainter::Antialiasing, true); // 设置画笔颜色、宽度 painter.setPen(QPen(QColor(0, 160, 230), 2)); // 绘制弧线 painter.drawArc(rect, startAngle, spanAngle);}

画弧线时,角度被分成了十六分之一,便是说,如果要 30 度,就需是 3016。
它有起始角度和跨度,还有位置矩形,以是,要想画出自己想要的弧线,就须要大概估算出各个参数的预估值。

绘制椭圆

void MainWindow::paintEvent(QPaintEvent event) { Q_UNUSED(event); QPainter painter(this); // 反走样 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 轴的半径。

绘制多边形

void MainWindow::paintEvent(QPaintEvent event){ Q_UNUSED(event); QPainter painter(this); // 反走样 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);}

首先,我们定义一个个坐标点的位置,这里有四个点,分别为:QPointF(30, 40)、QPointF(60, 150)、QPointF(150, 160)、 QPointF(220, 100),然后调用 drawPolygon() 将各个点连接起来,绘制为多边形。

绘制图片

void MainWindow::paintEvent(QPaintEvent event){ Q_UNUSED(event); QPainter painter(this); // 反走样 painter.setRenderHint(QPainter::Antialiasing, true); // 绘制图标 painter.drawPixmap(rect(), QPixmap(":/Images/logo"));}

通过 drawPixmap() 来绘制图片,我们可以指定图片绘制的区域 QRect,这里为全体界面的区域,当界面伸缩的时候,图片也会随着伸缩。