我想将信号/槽添加到 QGraphicsItem,以便我可以从另一个线程访问 QGraphicsItemObjects。我知道有两个选项:使用 QGraphicsObject 或从 QObject 和 QGraphicsItem 继承。
使用 QGraphicsObject
假设这很慢。根据这个答案 https://stackoverflow.com/questions/2292072/penalty-of-using-qgraphicsobject-vs-qgraphicsitem/2661673#2661673在 stackoverflow 上,QGraphicsObjects 由于其实现而很慢。当我查看 QGraphicsObjects 的源代码时,我可以看到根据对对象所做的更改发出许多信号。对我来说,这似乎是为什么 QGraphicsObjects 速度慢的一个合理的论点,但我认为第二种解决方案可以避免这种性能影响(如果确实是这样的话)。
继承自QObject和QGraphicsItem。
当构造一个继承自 QObject 和 QGraphicsItem 的类时,您似乎获得了 QGraphicsObject 最有趣的功能,减去了性能损失:您可以在类中定义插槽并发出信号,但您不会继承 QGraphicsObject 的默认实现会不断地对您可能不感兴趣的更改发出信号。您现在可以发出信号,但不必担心为您不关心的事情发出信号(更改的 x 值在 QGraphicsObject 中发出信号,但不在这个解决方案中)。
我的问题摘要
- QGraphicsObject 真的比 QGraphicsItem 慢吗?
- 如果是,是否是因为实现发出信号(并且发出信号是
性能大受影响)?
- 如果是这样,第二个解决方案(多重继承)是否可以避免这种惩罚?
这个线程 http://www.qtcentre.org/threads/12630-QGraphicsItem-doesn-t-inherit-QObject建议另一种选择:创建一个 QObject 子类来代表您的 QGraphicsItems 发出信号。
如果您有许多可以共享单个 QObject 的 QGraphicsItem,那么这将比让每个 QGraphicsItem 继承 QObject 更轻量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)