2019独角兽企业重金招聘Python工程师标准>>>
案例一:画背景图片
在头文件中在protect保护类型中添加paintEvent函数,paintEvent是一个虚函数,重写需要函数名,函数参数,返回值都相同。
void paintEvent(QPaintEvent *);
在.cpp文件中先添加头文件
#include <QPainter>
实现paintEvent函数绘制背景图片
第一种方法:
void Widget::paintEvent(QPaintEvent *)
{
QPainter p(this);
p.drawPixmap(0,0,width(),height(),QPixmap("../image/picture.jpg"));
}
如上图,我们需要用QPainter 定义一个变量p,后面是绘图设备
调用drawPixmap,前两个是坐标原点,0,0点事窗口左上角。width和height是Widget的宽度和高度。最后一个参数QPixmap函数中的参数有一个是绘制图片的路径,当然也可以用加载资源的方法。我们这里需要提前把图片资源放在和项目文件夹的同一路径下。如下图:
第二种方法:
void Widget::paintEvent(QPaintEvent *)
{
QPainter p;
p.begin(this);
p.drawPixmap(rect(),QPixmap("../image/picture.jpg"));
p.end();
}
第二种方法中没有像第一种方法中那样,在定义QPainter p时指定p的设备。可以像上图那样,先定义,再通过begin和end函数来实现。绘图操作需要在begin和end函数中间进行。这里用到drawPixmap的另一个构造函数,其中第一个参数rect()函数是获取矩形区域,这里就是指对话框区域。
下面是两个方法实现的效果图,我的image文件夹内的名为picture.jpg图片成为对话框的背景。
案例二:画线和图形
和案例一差不多,我们一样在头文件类中创建一个画家QPainterEvent
protected:
void paintEvent(QPaintEvent *);
如下图,我们还在private里面添加了一个x变量,这个是我们我们后面用到的和现在的没什么关系。
我们在.cpp文件中添加包含
#include <QPainter>//画家
#include <QPen>//线条颜色,风格
#include <QBrush>//可以填充颜色
然后继续在该文件中添加如下代码
void Widget::paintEvent(QPaintEvent *)
{
QPainter p;
p.begin(this);
//定义画笔
QPen pen;
pen.setWidth(5);//设置线宽
//pen.setColor(Qt::red);//第一种方法设置颜色,不过此方法颜色有限
pen.setColor(QColor(14,9,234));//第二种方法,rgb设置颜色,可以自己调色
pen.setStyle(Qt::DashLine);//设置风格,这个风格产生虚线
p.setPen(pen);//把画笔交给画家
//画直线
p.drawLine(50,50,150,50);
p.drawLine(50,50,50,150);
//创建画刷对象
QBrush brush;
brush.setColor(Qt::red);//设置颜色
brush.setStyle(Qt::Dense1Pattern);//设置风格
//把画刷交给画家
p.setBrush(brush);
//画矩形
p.drawRect(150,150,100,50);
//画圆形
p.drawEllipse(QPoint(150,150),50,25);
//画笑脸
p.drawPixmap(x,180,80,80,QPixmap("../image/face.png"));
p.end();
}
代码中有详细注释,点击运行,会得到画图结果,当然首先你需要有一个笑脸的图片,也可以随便找一个图片做实验。
案例三:我们添加一个按钮,每按一次按钮,让上面的笑脸向右水平移动
首先双击左面的界面文件
然后拖进去一个按钮,在按钮上右击转到槽
这样我们定义的x就能派上用场
首先在构造函数里面让x的值为0
在槽函数内添加代码
void Widget::on_pushButton_clicked()
{
x += 20;
if(x>width())
{
x = 0;
}
//刷新窗口,让窗口重绘
update();//间接调用paintEvent()
}
运行结果,按一次按钮,笑脸向右移动