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