是否QGraphicsSceneEvent::widget()总是一个QGraphicsView



根据文档,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.
    // ..
}

最新更新