我只想绘制新对象而不是重绘整个图形。这是由 QPainter 绘制的,例如。PaintEvent() 事件中的 QWidget 或其他简单的 QPaintDevice。
但是我可以使用什么绘图设备或其他对象来为现有的点添加新点,而不是一遍又一遍地绘制所有内容?
我只想绘制新对象而不是重绘整个图形。这是由 QPainter 绘制的,例如。PaintEvent() 事件中的 QWidget 或其他简单的 QPaintDevice。
但是我可以使用什么绘图设备或其他对象来为现有的点添加新点,而不是一遍又一遍地绘制所有内容?
基本上是 Reto 所说的,还有以下额外的考虑:
可以用作缓存的 PaintDevices:http: //qt-project.org/doc/qt-4.8/qpaintdevice.html列出了可以使用 QPainter 绘制的 paintDevices 的可能选项。您正在寻找的可能是:QImage、QPixmap、QPicture 甚至与 OpenGL 相关的 PaintDevices,以防您使用硬件加速小部件。如果您要执行blit并且需要直接访问像素数据,则建议使用 QImage,否则,对于简单的 QPainter 操作,QPixMap更快。
实际从缓存中绘制新点:查看QPainter的相关 draw{Image/Picture/Pixmap} api ,您可以使用它来绘制您首先缓存到的 PaintDevice。使用小部件的paintEvent调用中获得的paintEvent中的QPaintEvent::region来获取您需要从缓存中复制的矩形,请记住,如果您自己发送更新请求,请使用适当的更新函数来触发paintEvent。
使用 QImage 作为缓存。因此,首先将初始“点”绘制到图像上,然后将图像绘制到小部件中。在获得新的“点”时,将新的“点”绘制到图像并将图像绘制到小部件。