QT中绘图操作

目录

1.绘图操作的原理:

2.重写绘图事件

3.绘制基本图形(直线、椭圆、矩形、文字)

4.画笔设置(颜色、宽度、风格)

5.设置画刷(颜色、风格)

6.高级设置(抗锯齿、画家移动、保存和恢复)

7.利用画家对象加载图片

7.1加载图片

7.2按下按钮移动图片:

7.3基于定时器实现自动移动

8.绘图设备

8.1绘图的实质

8.2pixmap设备

8.3Image设备

3.picture设备


1.绘图操作的原理:

1.利用绘图事件,重写绘图事件函数

2.创建一个画家对象,其次使用画家对象的各种函数,来绘制图形或者图片

3.设置画家的相关参数以及画笔和画刷的调用,修饰所画图形

2.重写绘图事件

1.先在头文件中声明

    //重写绘图事件---在.h文件中声明
    void paintEvent(QPaintEvent*);

2.在cpp文件中重写

注意添加 画家 头文件

#include 

//重写绘图事件
void Widget:: paintEvent(QPaintEvent*)
{
    //首先要包含头文件
    //实例出一个画家对象
    QPainter painter1(this);   //并指定父亲
    
}

3.绘制基本图形(直线、椭圆、矩形、文字)

    //绘制直线---参数(坐标1,左标2)
    painter1.drawLine(QPoint(400,400),QPoint(600,600));

    //绘制椭圆---参数(中心,半长,半高)
    painter1.drawEllipse(QPoint(500,500),100,50);

    //绘制矩形--- 参数(左顶点,长,高)
    painter1.drawRect(400,400,150,50);
    //这个参数被QRect包裹住了
    painter1.drawRect(QRect(500,500,60,100));

    //绘制文字
    painter1.drawText(QRect(600,50,150,60),"文字显示");

4.画笔设置(颜色、宽度、风格)

    //画笔设置--颜色
    QPen pen1(QColor(255,0,0));

    //设置画笔宽度
    pen1.setWidth(4);

    //设置画笔风格
    pen1.setStyle(Qt::DashDotDotLine);

    //将画笔添加给画家
    painter1.setPen(pen1);

5.设置画刷(颜色、风格)

    //设置画刷-包括颜色
    QBrush brush1(Qt::cyan);

    //设置画刷风格--qbrushstyle进行枚举
    brush1.setStyle(Qt::CrossPattern);

    //将画刷添加给画家
    painter1.setBrush(brush1);

6.高级设置(抗锯齿、画家移动、保存和恢复)

    //绘制一个圆

    //加抗锯齿效果---参数为:setRenderHint搜索即可
    //抗锯齿--效率低
    painter1.setRenderHint(QPainter::HighQualityAntialiasing);
    painter1.drawEllipse(QPoint(600,200),150,150);
    
    //保存画笔当前的数据
    painter1.save();

    //移动画笔的初始位置---两个参数分别为x和y的偏移量
    painter1.translate(100,50);


    //绘制直线---参数(坐标1,左标2)
    painter1.drawLine(QPoint(400,400),QPoint(600,600));
    
    //恢复画笔之前保存的数据
    painter1.restore();

7.利用画家对象加载图片

利用Label标签也可以加载动态和静态图片,利用画家函数同样可以

7.1加载图片

首先要将图片资源添加到项目中,其次是使用函数--paint1.drawpixmap()

 //重定义窗口大小--直接this即可
    this->resize(1200,800);
    //重命名窗口名称
    this->setWindowTitle("新登录页面");
    //实例出一个画家对象
    QPainter paint1(this);  //并且指定父类
    //利用画家加载图片--前提是添加系统资源
    //pixmap:象图
    // 第一个参数是图片的起始坐标
    paint1.drawPixmap(0,0,QPixmap(":/resour/03.jpg"));

7.2按下按钮移动图片:

connect(ui->pushButton_4,&QPushButton::clicked,this,[=](){
        //左移图片
        //用updata函数更新数据--重新获取画家对象信息
        QX -= 20;
        if(QX < 0)
        {
            QX = this->width();
        }
        update();
    });

7.3基于定时器实现自动移动

//用定时器实现自动移动
    QTimer* timer1 = new QTimer(this);
    //timer1->start(100);
    //信号和槽
    connect(timer1,&QTimer::timeout,this,[=](){
       QX+=5;
       if(QX > this->width())
       {
           QX=0;
       }
       update();
    });

    connect(ui->pushButton_5,&QPushButton::clicked,this,[=](){
        //停止定时器
        timer1->stop();
    });

    connect(ui->pushButton_6,&QPushButton::clicked,this,[=](){
        //停止定时器
        timer1->start(100);
    });
}

注意:一个比较重要的东西就是---把代码写在合适的文件内

8.绘图设备

8.1绘图的实质

利用画家 QPainter 在绘图设备 QPainterDevice 上进行绘制,两者之间通过 引擎 QPainterEngine 

进行通信(翻译 QPainter 的指令)

8.2pixmap设备

专门为图像在屏幕上的显示做了优化

//对象出一个pixmap绘图设备---500*500
    QPixmap pixmap1(500,500);
    
    //实例化一个画家对象
    QPainter painter1;
    
    painter1.begin(&pixmap1);
    
    //默认背景是黑色
    //将默认背景改为白色
    pixmap1.fill(Qt::white);
    
    //设置画家画笔颜色
    painter1.setPen(QPen(Qt::red));
    
    //设置填充格式
    painter1.setBrush(QBrush(Qt::cyan,Qt::DiagCrossPattern));
    
    //设置画笔宽度
    QPen pen1(Qt::red);
    pen1.setWidth(5);
    pen1.setStyle(Qt::CustomDashLine);
    painter1.setPen(pen1);
    
    //绘制一个圆
    painter1.drawEllipse(QPoint(250,250),100,100);
    
    //保存文件
    pixmap1.save("D:\\QT\\09NINE\\pixmap1.jpg");
    
    //结束painter1
    painter1.end();
    

注意:直接这样写会提示:画板设备没有释放

解决方案:不使用painter1指针+begin与end函数

8.3Image设备

image设备提供了像素级的图片访问功能

1.在指定磁盘位置绘制image图片

 QImage image1(500,500,QImage::Format_RGB32);

    QPainter painter2(&image1);

    //默认背景是黑色
    //将默认背景改为白色
    image1.fill(Qt::white);

2.对图片进行像素级修改

void mydevice::paintEvent(QPaintEvent* ev)
{
    //如果想在窗口绘图,只能重写paintEvent函数


    //创建painter3,并且把窗口指定为父类
    QPainter* painter3 = new QPainter(this);

    //利用image对图片像素进行修改
    //添加资源文件
    //在窗口中绘图进行修改

    //创建一个image类型的对象
    QImage image2;

    //利用该对象加载资源图片
    image2.load(":/resour/02.jpg");



    //对像素进行处理
    int i = 0;
    int j = 0;
    for(i=0;iwidth();i++)
    {
        for(j=0;jheight();j++)
        {
            QRgb value = qRgb(255,0,0);
            image2.setPixel(i,j,value);
        }
    }

    //painter3将image画出来
    painter3->drawImage(0,0,image2);
}

3.picture设备

picture可以记录和重现绘图指令

1.记录绘图信息

    //创建picture对象
    QPicture picture1;


    //创建painter3
    QPainter painter3;

    //开始记录
    painter3.begin(&picture1);

    //调节画笔颜色
    painter3.setPen(Qt::cyan);

    //绘制矩形
    painter3.drawRect(200,200,100,100);

    //结束
    painter3.end();

    //保存picture
    picture1.save("D:\\QT\\09NINE\\picture.zt");

2.在绘图窗口重现绘图

//重写绘画函数
void mydevice::paintEvent(QPaintEvent* )
{
    //重新创建一个对象
    QPicture picture2;

    //加载之前的绘图信息
    picture2.load("D:\\QT\\09NINE\\picture.zt");

    //利用画家重现绘图步骤
    QPainter painter4(this);

    //绘制picture
    painter4.drawPicture(0,0,picture2);
}

以上便是全部内容!!!欢迎大家交流学习!!!

你可能感兴趣的:(QT编程,python,开发语言)