吃饭睡觉学QT(11)- QT窗口绘图

//绘图时候,先重写这个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来实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值