我是靠谱客的博主 聪明摩托,最近开发中收集的这篇文章主要介绍QT——绘图事件,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

    • 绘图事件
      • 基本绘图
      • 绘图高级设置
    • 手动调用绘图事件
    • 绘图设备

绘图事件

QT自带的绘图事件如下,一般需要我们自己重新实现它。

[virtual protected] void QWidget::paintEvent(QPaintEvent *event)

基本绘图

#include <QPainter>
void MainWindow::paintEvent(QPaintEvent *ev){
    //实例画家对象,参数是指定绘图设备
    QPainter painter(this);

    //设置画笔
    QPen pen(Qt::red);
    //设置画笔宽度
    pen.setWidth(1);
    //设置画笔风格
    pen.setStyle(Qt::DashLine);
    //让画家使用这支笔
    painter.setPen(pen);

    //设置画刷
    QBrush brush(Qt::cyan);
    //设置画刷风格
    brush.setStyle(Qt::Dense6Pattern);
    //让画家使用画刷
    painter.setBrush(brush);

    //画线
    painter.drawLine(QPoint(0,0),QPoint(100,100));
    //画圆
    painter.drawEllipse(QPoint(100,100),50,50);
    //画矩形
    painter.drawRect(QRect(20,20,50,50));
    //画文字
    painter.drawText(QRect(10,200,100,50),"hello,world!");
}

绘图高级设置

  • 抗锯齿能力
QPainter painter(this);
painter.drawEllipse(QPoint(100,100),50,50);
//设置抗锯齿能力,效率会变低
painter.setRenderHint(QPainter::Antialiasing);
painter.drawEllipse(QPoint(200,100),50,50);

很明显增加抗锯齿能力的圆,其边线画的质量更加好。

  • 移动画家

画家每一次画的坐标系都是不变的,可以使用下面的函数进行改变。

QPainter painter(this);
painter.drawEllipse(QPoint(100,100),50,50);
//移动画家
painter.translate(100,0);
painter.drawEllipse(QPoint(100,100),50,50);
  • 保存画家状态并还原
painter.save();
painter.restore();

手动调用绘图事件

前面我们知道,重写paintEvent的函数,QT运行时会自动调用这个事件,如果我们后面还想再次调用这个事件,怎么办呢?

  • 图片自动平移案例
QTimer *ti = new QTimer(this);
connect(ti,&QTimer::timeout,[=](){
//        repaint();
    update();  //手动调用绘图事件
});
ti->start(1000);
void MainWindow::paintEvent(QPaintEvent *ev){
    QPainter painter(this);
    Qx += 40;
    if(Qx >= this->width()){
        Qx = 0;
    }
    painter.drawPixmap(Qx,20,200,200,QPixmap(":/liu.jpg"));
}

以前使用repaint()来调用绘图事件,现在推荐使用update函数。

绘图设备

绘图设备是指继承QPainterDevice的子类。Qt一共提供了四个这样的类,分别是QPixmap、QBitmap、QImage和 QPicture。

  • QPixmap专门为图像在屏幕上的显示做了优化
  • QBitmap是QPixmap的一个子类,它的色深限定为1,可以使用 QPixmap的isQBitmap()函数来确定这个QPixmap是不是一个QBitmap。
  • QImage专门为图像的像素级访问做了优化。
  • QPicture则可以记录和重现QPainter的各条命令。

前面几个例子中,QPainter painter(this)之所以可以这么写,是因为QWidget也是一个绘图设备,因为他继承了QPainterDevice。

//Pixmap绘图设备
QPixmap pix(300,300);
// 填充颜色
pix.fill(Qt::white);
//声明画家
QPainter painter(&pix);

painter.drawEllipse(QPoint(20,20),50,50);
//保存
pix.save("E:\pix.png");

最后

以上就是聪明摩托为你收集整理的QT——绘图事件的全部内容,希望文章能够帮你解决QT——绘图事件所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部