绘图函数
paintEvent,如果在窗口内绘图,则必须在绘图函数中实现,在窗口需要重绘的时候(窗口状态改变)绘图函数自动调用.
Qpainter p(this)是创建画家对象,this是需要绘图的设备
也可以p->begin(this),但是要在绘图结束的时候加上p->end().
p.drawxxx()是各种绘图工具
1.记住要先画背景,在画其他的,否则会被背景覆盖
2.再绘图函数中不要进行太过于复杂的数据处理,否则程序运行很慢
创建画家对象
QPainter p(this);//创建画家对象,并指定当前窗口为绘图设备---------------------------------------------------------------
贴背景图
p.drawPixmap(0,0,width(),height(),QPixmap(":/new/prefix1/C:/Users/13764/Pictures/Saved Pictures/timg28XLAS1F.jpg"));---------------------------------------------------------------
定义画笔
//定义画笔 QPen pen; pen.setWidth(5);//设置线的宽度 pen.setColor(Qt::red); //pen.setColor(QColor(14,9,234));RGB设置颜色 pen.setStyle(Qt::SolidLine);//设置风格------------------------------------------------------------------
记住!!把笔交给画家
//把画笔交给画家 p.setPen(pen);-----------------------------------------------------------------
画直线
//画直线 p.drawLine(0,100,800,100); p.drawLine(100,0,100,800);--------------------------------------------------------------
创建画刷对象
//创建画刷对象 QBrush brush; brush.setColor(Qt::green);//设置颜色 brush.setStyle(Qt::CrossPattern);//设置样式------------------------------------------------------------
记住!!把画刷交给画家——创建画刷对象之后,所画的图形就是被画刷涂过的
//把画刷交给画家 p.setBrush(brush);----------------------------------------------------------
画图形
//画矩形 p.drawRect(200,200,100,100); //画圆 p.drawEllipse(QPoint(300,300),50,25);//QPoint放的是圆心的坐标,而50是横向的焦距,25是纵向的焦距----------------------------------------------------------
手动绘图操作——设定一个按钮,点击一下特定的图形向右滑动,划出窗口外再从另一端滑进来,调用update函数
-----
绘图函数中的内容
//画笑脸 p.drawPixmap(x,400,80,80,QPixmap(":/new/prefix1/C:/Users/13764/Pictures/Saved Pictures/d900e205c0d4aee9652588a5f74720dc (1).jpg"));-----
按钮的槽函数
void Picture::newPicture() { x+=100; if(x>width()) x=0; update();//刷新窗口,它会自动的调用绘图函数paintEvent来重新绘图 //但是注意不要再paintEvent中调用否则会产生递归的调用 //它有四个参数,可以指定区域来更新,不写这四个参数的话就会直接更新整个窗口 }--------------------------------------------------------------------------------------------
Update函数
刷新窗口,它会自动的调用绘图函数paintEvent来重新绘图;
但是注意不要再paintEvent中调用否则会产生递归的调用;
它有四个参数,可以指定区域来更新,不写这四个参数的话就会直接更新整个窗口;
------------------------------------------------------------------------------------------
整体代码
#include "picture.h" #include "ui_picture.h" #include<QPushButton> #include<QPainter>//画家头文件 #include<QPen>//画笔头文件 #include<QBrush>//画刷头文件 Picture::Picture(QWidget *parent) : QWidget(parent) , ui(new Ui::Picture) { x=0; ui->setupUi(this); this->resize(800,800); QPushButton*an=new QPushButton(this); an->setText("刷新"); an->move(0,770); an->show(); connect(an,&QPushButton::pressed,this,&Picture::newPicture); } Picture::~Picture() { delete ui; } void Picture::paintEvent(QPaintEvent *event) { QPainter p(this);//创建画家对象,并指定当前窗口为绘图设备 //绘图操作 //p.drawxxx()是各种绘图工具 //1.记住要先画背景,在画其他的,否则会被背景覆盖 //2.再绘图函数中不要进行太过于复杂的数据处理,否则程序运行很慢 p.drawPixmap(0,0,width(),height(),QPixmap(":/new/prefix1/C:/Users/13764/Pictures/Saved Pictures/timg28XLAS1F.jpg")); //p.drawPixmap(rect(),QPixmap(":/new/prefix1/C:/Users/13764/Pictures/Saved Pictures/timg28XLAS1F.jpg"));这样写就可以直接使用rect()获取整个窗口的大小 //定义画笔 QPen pen; pen.setWidth(5);//设置线的宽度 pen.setColor(Qt::red); //pen.setColor(QColor(14,9,234));RGB设置颜色 pen.setStyle(Qt::SolidLine);//设置风格 //把画笔交给画家 p.setPen(pen); //画直线 p.drawLine(0,100,800,100); p.drawLine(100,0,100,800); //创建画刷对象 QBrush brush; brush.setColor(Qt::green);//设置颜色 brush.setStyle(Qt::CrossPattern);//设置样式 //把画刷交给画家 p.setBrush(brush); //画矩形 p.drawRect(200,200,100,100); //画圆 p.drawEllipse(QPoint(300,300),50,25);//QPoint放的是圆心的坐标,而50是横向的焦距,25是纵向的焦距 //画笑脸 p.drawPixmap(x,400,80,80,QPixmap(":/new/prefix1/C:/Users/13764/Pictures/Saved Pictures/d900e205c0d4aee9652588a5f74720dc (1).jpg")); } void Picture::newPicture() { x+=100; if(x>width()) x=0; update();//刷新窗口,它会自动的调用绘图函数paintEvent来重新绘图 //但是注意不要再paintEvent中调用否则会产生递归的调用 //它有四个参数,可以指定区域来更新,不写这四个参数的话就会直接更新整个窗口 }-----------------------------------------------------------------------------------------
运行:
点击使窗口更新