【问题标题】:How to add new objects with QPainter?如何使用 QPainter 添加新对象?
【发布时间】:2013-03-22 15:39:59
【问题描述】:

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

但是我可以使用什么绘图设备或其他对象来向现有点添加新点,而不是一遍又一遍地绘制所有内容?

【问题讨论】:

    标签: c++ user-interface qt4


    【解决方案1】:

    基本上是 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 的相关 draw{Image/Picture/Pixmap} api,您可以使用它来绘制您拥有的 PaintDevice首先缓存到。使用小部件的paintEvent调用中获得的paintEvent中的QPaintEvent::region来获取您需要从缓存中复制的矩形,请记住,如果您自己发送更新请求,请使用appropriate更新函数触发paintEvent。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-06
        • 2023-03-10
        相关资源
        最近更新 更多