我正在编写一个继承自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对象和类似对象,并自由地移动/旋转它们。
答案 0 :(得分:3)
QWidget
和QGraphicsItem
根本不同。从文档中QGraphicsItem
是:
QGraphicsItem类是QGraphicsScene中所有图形项的基类。
它为编写您自己的自定义项目提供了轻量级的基础。这包括通过事件处理程序定义项目的几何,碰撞检测,绘图实现和项目交互。 QGraphicsItem是Graphics View Framework的一部分
基本上它仅用于QGraphcisScene
。
如果您需要QWidget
提供的自定义上下文菜单,我会在自定义QGraphicsView
中实现此功能,该自定义QWidget
(最终)从QGraphicsView
继承。 QGraphicsScene
可用于显示QGraphicsItem
,其中包含您的自定义//Add this lines and try again
QRadioButton *obj = new QRadioButton()
obj->setObjectName("test");
//If your using qss/css file for styling things...
#test QRadioButton::indicator {
width: 25px;
height: 25px;
}
。