根据文档,QGraphicsSceneEvent::widget()
返回一个QWidget。是不是小部件总是将是一个QGraphicsView,虽然(或null)?
我想是这样的,但我不明白为什么开发者不把它改成QGraphicsSceneEvent::view()
。
我问的原因是,在我的子类QGraphicsScene,我已经覆盖了QGraphicsScene::mousePressEvent()
,我想知道哪个视图起源的事件-我想知道它是安全的静态转换widget()
到QGraphicsView,或者如果它是可以想象的,一些其他小部件可以创建的事件。
结果是,QGraphicsSceneEvent::widget()
返回viewport小部件,而不是QGraphicsView。如果您想要QGraphicsView,您需要使用:event->widget()->parent()
.
您引用的文档页面提到QGraphicsView
是事件的目标:
当QGraphicsView接收Qt鼠标、键盘和拖放操作时事件(QMouseEvent, QKeyEvent, QDragEvent等),它会翻译它们到QGraphicsSceneEvent子类的实例中,并将它们转发给它显示的QGraphicsScene。然后场景将事件转发给相关项目
然而,如果你怀疑QGraphicsSceneEvent::widget()
总是返回QGraphicsView
,或者你认为它应该总是一个QGraphicsView
,你可以通过使用qobject_cast
:
QGraphicsView *view = qobject_cast<QGraphicsView *>(event->widget();
if (view) {
// Handle the event
} else {
// This is something that I do not expect.
// ..
}