QT中利用QPainter画图操作带图详解(一)

环境:QT5.5.1+MinGW+windows8.1

1.首先建立一个工程,我选用的是mianwindow。在头文件mainwindow.h中的public下加入

    //绘图事件,系统默认会调用它,我们只需要实现它
    void paintEvent(QPaintEvent *);

2.在mainwindow.c文件中实现你想绘制的图案,这里就列举了一些常用的一些接口,可以自己去发挥。

void MainWindow::paintEvent(QPaintEvent *)
{
    //painter是画家,this是绘图设备,就是指QWidget
    QPainter painter(this);
    //设置画笔颜色
    QPen pen(QColor(0,0,0));
    //设置笔宽度
    pen.setWidth(1);
//    //设置笔风格
//    pen.setStyle(Qt::DotLine);
    //给画家拿笔
    painter.setPen(pen);
    //画刷填充颜色
    QBrush brush(QColor(105,105,105));
    //设置画刷风格
    brush.setStyle(Qt::Dense4Pattern);
    //给画家拿刷子
    painter.setBrush(brush);


    //如果出屏幕,强制变回10
    if(posX > this->width())
    {
        posX = 0;
    }
    //画图片
    painter.drawRect(QRect(10,10,600,63));
    painter.drawPixmap(posX,10,QPixmap(":/new/prefix1/image/盘煤小车(小图标).bmp"));


//    ///高级设置
//    //设置抗锯齿,精度越高,效率越低
//    painter.setRenderHint(QPainter::Antialiasing);
//    //相对位置移动
//    painter.drawRect(QRect(20,20,50,50));
//    painter.translate(QPoint(100,0));
//    //保存状态
//    painter.save();
//    painter.drawRect(QRect(20,20,50,50));
//    //取出状态,后面画的就相对于该状态前的位置
//    painter.restore();



//    //画线
//    painter.drawLine(QPoint(0,0),QPoint(100,100));
//    //画圆
//    painter.drawEllipse(QPoint(100,100),100,100);
//    //画矩形
//    painter.drawRect(QRect(10,10,50,50));
//    //设置字体
//    painter.setFont(QFont("Arial", 15));
//    //画字体
//    painter.drawText(QRect(10,200,200,50),Qt::AlignCenter,"字在这儿");
}

在构造函数里面有个功能:按下按钮后,图片会右移设置的距离

    connect(ui->pushButton,&QPushButton::clicked,this,[=](){
        posX += 50;
        //手动调用绘图事件,在帮助里面搜repaint
        update();
    });

这里就会有一个问题,一直按下按钮,图片会一直右移直到出画,你就看不到它了,这肯定不行了,所以在paintEvent函数中有这样一行代码,可以限制它。

    //如果出屏幕,强制变回10
    if(posX > this->width())
    {
        posX = 0;
    }

有关于图案更新的官方介绍:在这里插入图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在QT Creator绘制多张图片,可以使用QPainter类进行绘制。下面是一个简单的示例,演示如何在窗口绘制多张图片。 首先,在QT Creator创建一个新的窗口应用程序。然后打开mainwindow.cpp文件,在构造函数添加以下代码: ``` MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { //设置窗口大小 setFixedSize(800, 600); } void MainWindow::paintEvent(QPaintEvent *event) { QPainter painter(this); //绘制第一张图片 QPixmap pixmap1(":/images/image1.png"); painter.drawPixmap(0, 0, pixmap1.scaled(200, 200, Qt::KeepAspectRatio)); //绘制第二张图片 QPixmap pixmap2(":/images/image2.png"); painter.drawPixmap(250, 0, pixmap2.scaled(200, 200, Qt::KeepAspectRatio)); //绘制第三张图片 QPixmap pixmap3(":/images/image3.png"); painter.drawPixmap(500, 0, pixmap3.scaled(200, 200, Qt::KeepAspectRatio)); } ``` 在这个示例,我们首先设置了窗口的大小。然后在paintEvent()函数,我们创建了一个QPainter对象,并使用drawPixmap()函数绘制了三张图片。每一张图片都使用相对于窗口左上角的坐标进行定位,并使用scaled()函数进行缩放,以使其适合在窗口显示。 需要注意的是,这个示例假设有三张名为“image1.png”、“image2.png”和“image3.png”的图片文件位于项目资源文件的“images”文件夹。如果您的项目的图片文件具有不同的名称或位置,请相应地修改示例的文件路径。 最后,在QT Creator编译并运行应用程序,您将看到在窗口绘制了三张图片。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值