我正在编写一个继承自QGraphicsItem和QWidget的类。我这样做的原因是因为我想利用setPos()和setRotation()(来自QGraphicsItem)使其可拖动和customContextMenuRequested信号(来自QWidget)。代码如下所示:
class MyClass: public QWidget, public QGraphicsItem {
Q_OBJECT
/* Variables and Methods here */
};
我不是QT的专家,也不是每个细节的工作原理。然而,通过测试代码,我感觉MyClass实际上由两个可能具有不同位置的GUI元素组成。问题是,当我把它们放在彼此的顶部时,我要么无法使上下文菜单工作,要么我无法拖动它。所以我假设顶部只能有一个(接收鼠标点击事件)。 MyClass是QGraphicsScene作为QGraphicsItem,QGraphicsScene设置为QGraphicsView,如果这是相关的。
我的假设是否正确?
处理这个问题的优雅方法是什么?
提前致谢!
编辑:如果它有帮助这是我的应用程序基本上应该做的。用户应该能够向场景添加多个MyClass对象和类似对象,并自由地移动/旋转它们。
QWidget
和QGraphicsItem
在Qt中是根本不同的东西。从文档中,QGraphicsItem
是:
QGraphicsItem类是QGraphicsScene中所有图形项的基类。
它为编写您自己的自定义项目提供了轻量级的基础。这包括通过事件处理程序定义项目的几何,碰撞检测,绘图实现和项目交互。 QGraphicsItem是Graphics View Framework的一部分
基本上它只用于QGraphcisScene
。
如果你需要一个可以从QWidget
获得的自定义上下文菜单,我会在自定义的QGraphicsView
中实现它,它最终从QWidget
继承。一个QGraphicsView
可以用来显示一个QGraphicsScene
,它将保持你的自定义QGraphicsItem
。