是不是可以在Qt中同时绘制多个对象?

时间:2016-03-11 14:57:51

标签: c++ qt paint

  • 我在Qt文档中阅读了以下内容。

Qt documentation on QPainter

The original question on SO, that I looked into.

  • 所以,我有两个类,有自己的paint()函数。在接收到由用户进行的不同且独立的动作触发的各自的绘画事件时,将调用绘画功能。这很好。

    • 现在由于某种原因,我需要同时显示和更新这两个对象。
    • 如此简单,将两个项目添加到场景中都不起作用。只显示和更新其中一个。重构代码对我来说不是问题。我可以重新安排这两个类,以便它们都来自一个paint()。

但这真让我感到疑惑,这是我的问题(我也用Google搜索了一下),然后如何同时绘制了许多对象的场景(至少它们会产生并发错觉)?以某种方式或通过一些基于时间的交错使用线程?

也许这是一个愚蠢的问题。我不知道。

2 个答案:

答案 0 :(得分:1)

对于一个在现实中并非不存在的想象问题,这确实是一个愚蠢的问题。图形视图将按照生成所需结果所需的顺序安排项目的连续绘制。现在,如果您的代码没有实现所需的结果,那么这是一个完全不同的主题。没有并发性,这些是仅在主线程中发生的连续操作。

如果您的绘图非常复杂,请使用QImage上的辅助线程进行绘制,并使用QImage作为缓存在各自的绘图功能中绘制项目。

  

现在由于某种原因,我需要显示和更新两个对象   同一时间。

这可能是什么原因? “同时”是什么意思?在一个框架?相距毫秒是否足以“同时”获得资格?

答案 1 :(得分:0)

重新router.on("route", function(page, ...arguments) { //here 'page' can be 'index', 'lifestyle' or 'about'. //then you can save the 'page' in a variable or assign your 'active' class right away }); 绘画:绘图事件由窗口小部件合成器传递给各个窗口小部件。它与默认栅格后端一起使用的方式如下:层次结构中最顶层的窗口小部件由QWidget支持。当要重新绘制任何子窗口小部件时,合成器将复合绘制事件传递给覆盖要重新绘制的区域的窗口小部件。当合成器遍历小部件图时,这将按顺序完成。

重新QImage绘画:绘画“事件”由场景传递给各个项目。根据需要更新的区域,明确标记要更新的项目等来选择要绘制的项目。画家设置为将项目与场景的其余部分正确合成。当场景遍历项目图时,对QGraphicsItem的调用将按顺序完成。

通常,由于数据依赖性而无法在 parallel 中执行这些操作,并且paintpaintEvent没有要求是线程安全的。

您的问题与此根本没有直接关系,您需要显示一个完整的代码示例来重现您的问题。很可能您的项目实施忽略了项目行为的一些要求。