当前位置: 首页> 教育> 幼教 > qt 清除模式的应用以及动态绘制

qt 清除模式的应用以及动态绘制

时间:2025/7/13 3:39:41来源:https://blog.csdn.net/zhtsuc/article/details/140968153 浏览次数:0次

问题描述

在现实中,我们经常需要动态的去更新屏幕上的数字或者下标等,但是 qt 中没有直接的方法,一般都是通过先擦除,然后再绘制新的数字下标等。

在擦除模式后,我们还是需要动态绘制在之前的图片上,所以需要切换回原来的模式。这个很重要,不然无法绘制。

因为是动态增量绘制,所以需要 pixmap 为成员变量,后续的绘制都在 pixmap 上。

#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include <QPainter>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent),pixmap(1000,1000), ui(new Ui::MainWindow)
{ui->setupUi(this);oldX = 150;oldY = 150;count = 0;updated = false;
}void MainWindow::paintEvent(QPaintEvent *event){QPainter p(this);if(!updated){// QPainter painter(&pixmap);// qDebug()<<painter.compositionMode() << "helloworld";// painter.setPen(QPen(Qt::green));// painter.drawEllipse(QPoint(150,150),20,20);// painter.drawText(QRect(240, 45, 270, 60), "2");// p.drawPixmap(0,0,pixmap);}if (updated){QPainter painter(&pixmap);painter.setPen(QPen(Qt::green));//painter.setCompositionMode(QPainter::CompositionMode_Xor);int x = oldX + count;int y = oldY + count;int r = 20;painter.drawEllipse(QPoint(x,y),r,r);painter.setCompositionMode(QPainter::CompositionMode_Clear);painter.fillRect(oldX + r -5, oldY + 100 - 5, oldX + r + 5, oldY + r + 5, Qt::white); // 清除局部区域painter.setCompositionMode(QPainter::CompositionMode_SourceOver);painter.drawText(QRect(x + r -5, y + 100 - 5, x + r + 5, y + r + 5), QString::number(count));oldX = x;oldY = y;p.drawPixmap(0,0,pixmap);updated = false;}
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{qDebug()<<"hello";count += 20;this->updated = true;this->update();}

关键字:qt 清除模式的应用以及动态绘制

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: