绘图函数
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中调用否则会产生递归的调用
//它有四个参数,可以指定区域来更新,不写这四个参数的话就会直接更新整个窗口
}
-----------------------------------------------------------------------------------------
运行:
点击使窗口更新