从QGraphicsItem + QWidget继承时的GUI冲突

问题描述 投票:0回答:1

我正在编写一个继承自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对象和类似对象,并自由地移动/旋转它们。

c++ qt qwidget qgraphicsitem
1个回答
3
投票

QWidgetQGraphicsItem在Qt中是根本不同的东西。从文档中,QGraphicsItem是:

QGraphicsItem类是QGraphicsScene中所有图形项的基类。

它为编写您自己的自定义项目提供了轻量级的基础。这包括通过事件处理程序定义项目的几何,碰撞检测,绘图实现和项目交互。 QGraphicsItem是Graphics View Framework的一部分

基本上它只用于QGraphcisScene

如果你需要一个可以从QWidget获得的自定义上下文菜单,我会在自定义的QGraphicsView中实现它,它最终从QWidget继承。一个QGraphicsView可以用来显示一个QGraphicsScene,它将保持你的自定义QGraphicsItem

© www.soinside.com 2019 - 2024. All rights reserved.