如何使用QPainter添加新对象?

时间:2013-03-22 15:39:59

标签: c++ user-interface qt4

我想只绘制新对象而不是重绘整个图形。这是通过QPainter绘制的,例如。 QWidget或paintEvent()事件中的其他简单QPaintDevice。

但是,我可以使用哪种绘画设备或其他物体向现有的点添加新点而不是一遍又一遍地绘制所有内容?

2 个答案:

答案 0 :(得分:2)

基本上是Reto所说的,还有以下额外的考虑因素:

  1. 可以用作缓存的PaintDevices:http://qt-project.org/doc/qt-4.8/qpaintdevice.html列出了可以使用QPainter绘制的paintDevices的可能选项。您正在寻找的可能是:QImage,QPixmap,QPicture,甚至是与OpenGL相关的PaintDevices,以防您使用硬件加速小部件。 如果您要执行blit,并且需要直接像素数据访问,则建议使用QImage,否则,对于简单的QPainter操作,QPixMap为faster

  2. 实际上从您拥有的缓存中绘制新点:查看QPainter的相关绘图{Image / Picture / Pixmap} api,您可以使用它来绘制PaintDevice你已经在第一时间缓存了。使用在窗口小部件的paintEvent调用中获得的paintEvent中的QPaintEvent::region来获取需要从缓存中复制的矩形,请记住,如果您自己发送更新请求,请使用{{3更新函数以触发paintEvent。

答案 1 :(得分:1)

使用QImage作为缓存。因此,首先将初始“点”绘制到图像,然后将图像绘制到窗口小部件中。在获得新的“点”时,将新的“点”绘制到图像并将图像绘制到窗口小部件。