如何避免清除以前在Qt中绘制的点数?

ind*_*ira 2 qt qt4

我想在运行时逐个像素地绘制图像.我使用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)

Gun*_*iez 7

paintEvent应该完全重绘事件中指定的小部件区域.所以你有责任缓冲以前的结果.

在paintEvent中更改所需的输出并没有多大意义,因为它可能是随机调用的,当它被调用时是不受控制的.

如果你想避免它,你可以使用QGraphicsView.

缓冲可以使用a来完成QPixmap,这将是Lines该类的一部分.您在像素图中绘制像素(不在绘图事件中,在updateStatus中),并在绘图事件中绘制像素图.