QGraphicsScene Event :: widget()总是一个QGraphicsView吗?

时间:2014-03-28 19:06:00

标签: qt qgraphicsview

根据the docsQGraphicsSceneEvent::widget()返回一个QWidget。不是小部件始终将成为QGraphicsView,但是(或null)?

我会这么认为,除非我不明白为什么开发者不会做出QGraphicsSceneEvent::view()

我问的原因是,在我的子类QGraphicsScene中,我已经覆盖QGraphicsScene::mousePressEvent()并且我想知道哪个视图来自该事件 - 我想知道它是否已经过了对QGraphicsView静态转换widget()是安全的,或者可以想象其他一些小部件可以创建该事件。

2 个答案:

答案 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.
    // ..
}