//绘图时候,先重写这个paintEvent事件 (头文件protected)
#include "widget.h"
#include "ui_widget.h"
#include <QPainter>//画家头文件
#include <QPen> //画笔头文件
#include <QBrush> //画刷头文件
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
x = 0; //图片横坐标
}
void Widget::paintEvent(QPaintEvent *event)
{
QPainter p(this); //定义一个画家 通过构造函数给他传入一个设备
//也可以通过另外一种方式 QPainter p; p.begin(this); .... 不能忘了在最后要加入p.end();
//绘图操作 p.drawxxx();
//p.drawPixmap(0,0,width(),height(),QPixmap("://imag_thunder1.jpg"));
//还有一个方法 获取整个矩形的空间显示图片
//p.drawPixmap(rect(),QPixmap("://imag_thunder1.jpg"));
QPen pen; //定义一支画笔
pen.setWidth(5); //设置线宽 参数是像素点
//pen.setColor(Qt::red);//设置颜色 这种方式比较有局限性
pen.setColor(QColor(35,128,19)); //用rgb设置颜色 桌面右击 个性化,颜色,其他
pen.setStyle(Qt::DashDotDotLine);
p.setPen(pen); //将画笔交给画家
p.drawLine(50,50,200,50); //画线 参数是起点和终点的坐标值,两点确定一条直线
p.drawLine(50,50,50,200);
QBrush brush;
brush.setColor(Qt::yellow);
brush.setStyle(Qt::Dense7Pattern);
p.setBrush(brush);
p.drawRect(150,150,100,50); //设置矩形,前两个参数是一个点,后面是长和高
p.drawEllipse(QPoint(150,150),50,30);//设置椭圆形或者圆形 当后面两个参数一致时候就是圆形
p.drawPixmap(x,180,50,50,QPixmap("://imag_thunder1.jpg"));
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
x += 20;
if(x > width())
{
x = 0;
}
update(); //刷新窗口,重绘窗口
//这个Update不能放在绘图事件中,否则会一直递归调用
}
在QT中如果想要在窗口中绘图,必须通过重写PainterEvent这个函数来实现。首先需要定义一个Qpainter类的对象,称之为画家。他的构造函数需要传一个绘图设备进去,可以用QPainter painter(this) 实现,亦可以通过begain end 来实现。
在绘图过程中大部分操作都是 p.drawxxx 这样的操作包括我们写到的p.drawline p.drawRect 这样的函数,而绘制一个背景图需要p.drawpixmap这个函数,我们在这个程序里用了五个参数,前面两个是坐标点,后面两个是大小的长和宽,最后一个图片路径。而如果我们相对绘制的东西进行操作,可以“给画家一支笔” QPen pen; 再将笔交给画家 p.setpen(pen); 然后设定想要的效果,如果想要填充颜色和样式,要定义一个刷子 brush把刷子交给画家就可以操作了
然后还有个手动更新窗口,通过改变他的横坐标 调用update来实现