Qt中不能同时绘制多个对象吗?
Is it not possible to have multiple objects in Qt being painted simultaneously?
- 我在 Qt 文档中阅读了以下内容。
The original question on SO, that I looked into.
所以,我有两个 类,它们有自己的 paint() 函数。绘画函数将在接收到它们各自的绘画事件时被调用,这些事件是由用户在不同和独立的动作上触发的。这很好用。
- 现在由于某些原因,我需要同时显示和更新这两个对象。
- 很简单,将这两个项目都添加到场景中是行不通的。仅显示和更新其中之一。重构代码对我来说不是问题。我可以重新安排这两个 类 以便它们都是从一个 paint().
中绘制的
但这真的让我想知道,这是我的问题(我也用谷歌搜索了一下),然后如何同时绘制具有许多对象的场景(至少它们给人一种并发的错觉)?以某种方式或通过一些基于时间的交错使用线程?
也许这是个愚蠢的问题。我不知道。
Re QWidget
绘画:绘画事件由小部件合成器传送到各个小部件。它使用默认光栅后端的方式如下:层次结构中最顶层的小部件由 QImage
支持。当要重绘任何子小部件时,合成器将复合绘制事件传递给覆盖要重绘区域的小部件。这是在合成器遍历小部件图时顺序完成的。
Re QGraphicsItem
绘画:绘画"events" 由场景传送到各个项目。要绘制的项目是根据需要更新的区域、明确标记为更新的项目等来选择的。画家设置为正确地将项目与场景的其余部分合成。当场景遍历项目图时,对 paint
的调用按顺序完成。
一般来说,由于数据依赖性,并行不可能做到这些,事实上 paintEvent
或 paint
是线程安全的。
您的问题与此根本没有直接关系,您需要展示一个完整的代码示例来重现您的问题。您对项目的实施很可能忽略了项目行为的一些要求。
这确实是一个关于现实中不存在的想象问题的愚蠢问题。图形视图将按照产生所需结果所需的顺序安排项目的连续绘制。现在,如果您的代码没有实现预期的结果,那就完全是另一回事了。没有并发,那些是连续的操作,只发生在主线程。
如果您的绘图非常复杂,请在 QImage
上使用辅助线程进行绘图,并使用 QImage
作为缓存在各自的绘图函数中绘制您的项目。
Now for some reason, I need to show and update both the objects at the
same time.
可能是什么原因? "at the same time" 是什么意思?在单帧中?相差一毫秒是否符合 "at the same time" 的条件?
- 我在 Qt 文档中阅读了以下内容。
The original question on SO, that I looked into.
所以,我有两个 类,它们有自己的 paint() 函数。绘画函数将在接收到它们各自的绘画事件时被调用,这些事件是由用户在不同和独立的动作上触发的。这很好用。
- 现在由于某些原因,我需要同时显示和更新这两个对象。
- 很简单,将这两个项目都添加到场景中是行不通的。仅显示和更新其中之一。重构代码对我来说不是问题。我可以重新安排这两个 类 以便它们都是从一个 paint(). 中绘制的
但这真的让我想知道,这是我的问题(我也用谷歌搜索了一下),然后如何同时绘制具有许多对象的场景(至少它们给人一种并发的错觉)?以某种方式或通过一些基于时间的交错使用线程?
也许这是个愚蠢的问题。我不知道。
Re QWidget
绘画:绘画事件由小部件合成器传送到各个小部件。它使用默认光栅后端的方式如下:层次结构中最顶层的小部件由 QImage
支持。当要重绘任何子小部件时,合成器将复合绘制事件传递给覆盖要重绘区域的小部件。这是在合成器遍历小部件图时顺序完成的。
Re QGraphicsItem
绘画:绘画"events" 由场景传送到各个项目。要绘制的项目是根据需要更新的区域、明确标记为更新的项目等来选择的。画家设置为正确地将项目与场景的其余部分合成。当场景遍历项目图时,对 paint
的调用按顺序完成。
一般来说,由于数据依赖性,并行不可能做到这些,事实上 paintEvent
或 paint
是线程安全的。
您的问题与此根本没有直接关系,您需要展示一个完整的代码示例来重现您的问题。您对项目的实施很可能忽略了项目行为的一些要求。
这确实是一个关于现实中不存在的想象问题的愚蠢问题。图形视图将按照产生所需结果所需的顺序安排项目的连续绘制。现在,如果您的代码没有实现预期的结果,那就完全是另一回事了。没有并发,那些是连续的操作,只发生在主线程。
如果您的绘图非常复杂,请在 QImage
上使用辅助线程进行绘图,并使用 QImage
作为缓存在各自的绘图函数中绘制您的项目。
Now for some reason, I need to show and update both the objects at the same time.
可能是什么原因? "at the same time" 是什么意思?在单帧中?相差一毫秒是否符合 "at the same time" 的条件?