根据the docs,QGraphicsSceneEvent::widget()
返回一个QWidget。不是小部件始终将成为QGraphicsView,但是(或null)?
我会这么认为,除非我不明白为什么开发者不会做出QGraphicsSceneEvent::view()
。
我问的原因是,在我的子类QGraphicsScene中,我已经覆盖QGraphicsScene::mousePressEvent()
并且我想知道哪个视图来自该事件 - 我想知道它是否已经过了对QGraphicsView静态转换widget()
是安全的,或者可以想象其他一些小部件可以创建该事件。
答案 0 :(得分:2)
事实证明,QGraphicsSceneEvent::widget()
返回视口小部件,而不是QGraphicsView。如果您需要QGraphicsView,则需要使用:event->widget()->parent()
。
答案 1 :(得分:1)
您提到的文档页面提到了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.
// ..
}