- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是第一次使用 QGraphicsView/Scene。这是在 PyQt 中,但除了 Python 与多重继承不同之外,我认为这是一个通用的 Qt 问题。
我首先创建了几个 QGraphicsItem 重载作为构建 block 。一旦我让它们按照我想要的方式工作,我想尝试将它们组合起来,并且惊讶地发现我无法在 QGraphicsLayouts 中使用它们。这是因为 QGraphicsLayouts 采用继承自 QGraphicsLayoutItem 的项目,而 QGraphicsItems 由 QGraphicsLayoutItems 继承,而 QGraphicsLayoutItems 又由 QGraphicsWidgets 继承。
QGraphicsItem/QGraphicsWidget 有一个 graphicsItem 属性,但是查看代码,我不认为我可以将我的项目分配给这个属性并让它们正常工作。我确实找到了 this example , 但奇怪的是它有继承自这两个类的例子。我很困惑。
所以我正在尝试找到让我的项目在布局中工作的最简单方法。有没有比重写和继承这两个类之一更简单的方法来做到这一点?
第二个问题,对于何时应该从 QGraphicsWidget 继承与何时应该从 QGraphicsLayoutItem 继承,是否有经验法则?
解释何时使用 sizeHint 与 boundingRect 的额外功劳。
感谢帮助,布雷特
最佳答案
让项目在布局中工作的最简单方法是将继承更改为 QGraphicsWidget 并覆盖 setGeometry() 和 sizeHint() 方法。应该是一个简单的更改,因为您的项目通过继承祖先仍然是 QGraphicsItems。
Qt Graphics View 框架被设计为尽可能轻量级。因此,有多种选择来组装具有不同功能的项目。如果布局中项目的大小不是问题,您可以从 QGraphicsWidget 继承。否则,继承自 QGraphicsLayoutItem(除非您需要 QGraphicsWidget 的额外功能)。由于您不能从 PyQt 类多重继承,因此您必须使用组合来创建由 QGraphicsLayoutItem 控制的项目,就像您引用的示例中一样。
场景使用 boundingRect() 方法来管理项目。布局使用 sizeHint() 方法来确定布局项的大小。场景使用 shape() 方法更精确地确定项目的位置(用于碰撞、 HitTest 等)。
关于qt - QGraphicsWidget 与 QGraphicsLayoutItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4116657/
我是第一次使用 QGraphicsView/Scene。这是在 PyQt 中,但除了 Python 与多重继承不同之外,我认为这是一个通用的 Qt 问题。 我首先创建了几个 QGraphicsItem
我试图将 QGraphicsPixmapItem 放入 QGraphicsLinearLayout 中。因为那是不可能的,因为 QGraphicsPixmapItem 不是 QGraphicsLayo
我是一名优秀的程序员,十分优秀!