Qt绘图案例

原创
2017/03/05 22:48
阅读数 664

案例一:画背景图片

在头文件中在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()

}

运行结果,按一次按钮,笑脸向右移动

展开阅读全文
Qt
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部