我想在运行时逐个像素地绘制图像。我使用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();
}
答案 0 :(得分:7)
paintEvent
应该对事件中指定的窗口小部件区域进行完全重绘。
所以你有责任缓冲以前的结果。
在paintEvent中更改所需的输出并没有多大意义,因为它可能被随机调用,并且当它被调用时无法控制。
如果您想避免使用QGraphicsView。
缓冲可以使用QPixmap
来完成,Lines
是{{1}}类的一部分。您在像素图中绘制像素(而不是在paintStatus中的paint事件中),并在paint事件中绘制像素图。
答案 1 :(得分:1)
QWidget::setAttribute( WA_OpaquePaintEvent, true );
阻止清除小部件。但是,这仅用于优化,以防小部件完成重新绘制。
你应该遵循Hirsch博士的建议。