在 Qt 中,paintEvent(QPaintEvent *event)
是类中专门用于处理绘图的事件函数。每当需要重绘 widget(例如,设置画笔、设置画刷、设置画家等情况),Qt 会自动调用这个函数。重写这个函数后,你可以使用 QPainter
类进行绘图操作。
头文件:#include <QPainter>
下面为绘图基本事件的示例:
#include "widget.h"
#include "ui_widget.h"
#include<QPainter>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
void Widget::paintEvent(QPaintEvent *)//重写函数
{
//实例化画家对象,this代表在此widget上画
QPainter painter(this);
//设置画笔
QPen pen(QColor(255,0,0));//画刷颜色
//设置笔宽
pen.setWidth(3);
//设置画笔风格
pen.setStyle(Qt::DotLine);
//画家使用
painter.setPen(pen);
//设置画刷
QBrush brush(Qt::cyan);
//画刷风格
brush.setStyle(Qt::Dense1Pattern);
painter.setBrush(brush);
//画线
painter.drawLine(QPoint(0,0),QPoint(100,100));
//画椭圆
painter.drawEllipse(QPoint(100,100),50,50);
//画矩形
painter.drawRect(QRect(20,20,50,50));
//画文字
painter.drawText(QRect(10,200,150,50),"文字内容");
}
Widget::~Widget()
{
delete ui;
}
当然也可以让画家画所保存的图片:
Qpainter painter(this);
painter.drawPixmap(200,200,QPixmap(":/Image/image.png"));//根据图片位置填写
注意:void paintEvent(QPaintEvent *)函数已经在widget.h中声明
下面还有一些绘画的高级设置:
1.添加抗锯齿能力
QPainter painter2(this);
painter2.drawEllipse(QPoint(250,200),50,50);
//添加抗锯齿能力(但是会降低效率)
painter2.setRenderHint(QPainter::Antialiasing);//查询手册
//测试
painter2.drawEllipse(QPoint(350,200),50,50);
2.移动画家起始点
QPainter painter3(this);
painter3.drawRect(QRect(250,280,50,50));
painter3.translate(100,0);//起始点设为沿x轴方向平移100,默认为(0,0)移动后为(100,0)
painter3.drawRect(QRect(250,280,50,50));
3.保存和还原画家状态
QPainter painter4(this);
painter4.drawRect(QRect(250,400,50,50));//画的第一个矩形
painter4.translate(100,0);//起始点设为沿x轴方向平移100,默认为(0,0)移动后为(100,0)
//保存画家当前状态
painter4.save();
painter4.drawRect(QRect(250,400,50,50));//画的第二个矩形
painter4.translate(100,0);//再次移动
//还原画家状态
painter4.restore();
painter4.drawRect(QRect(250,400,50,50));//画的第三个矩形
//4结果只有两个矩形,原因是后两个重叠在一起了
注:代码中一些专有名词如QPoint、 QRect可以查询QT的帮助手册获取