我想在运行时逐个像素地绘制图像.我使用QPainter和paintEvent来绘制.但是,每次调用paintEvent时,将清除先前绘制的图像并绘制新点.
如何避免清除以前绘制的部分?我只想将新的像素点附加到先前绘制的点上.
Lines::Lines(QWidget *parent)
: QWidget(parent)
{
m_timer = new QTimer(this);
connect(m_timer, SIGNAL(timeout()), this, SLOT(updateStatus()));
m_timer->start();
m_x = 0;
m_y = 0;
}
void Lines::paintEvent(QPaintEvent *event)
{
QPen pen(Qt::black, 2, Qt::SolidLine);
QPainter painter(this);
painter.setPen(pen);
painter.drawPoint(m_x, m_y);
}
void Lines::updateStatus()
{
m_x++;
m_y++;
update();
}
Run Code Online (Sandbox Code Playgroud)
paintEvent应该完全重绘事件中指定的小部件区域.所以你有责任缓冲以前的结果.
在paintEvent中更改所需的输出并没有多大意义,因为它可能是随机调用的,当它被调用时是不受控制的.
如果你想避免它,你可以使用QGraphicsView.
缓冲可以使用a来完成QPixmap,这将是Lines该类的一部分.您在像素图中绘制像素(不在绘图事件中,在updateStatus中),并在绘图事件中绘制像素图.