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"));