繁体   English   中英

Qt:从QGraphicsView传递QGraphicsSceneContextMenuEvent

[英]Qt: Pass QGraphicsSceneContextMenuEvent from QGraphicsView

我从QGraphicsView和QGraphicsRectItem派生。 我在两个类上都重载了contextMenuEvent来提供弹出菜单。 单击空白时,我想要QGraphicsView上下文菜单,单击某个项目时,我想要QGraphicsItem弹出菜单。

在第一个实现中,无论单击何处,我都会看到QGraphicsView弹出窗口。 所以我修改了contextMenuEvent,如下所示:

void CustomGraphicsView::contextMenuEvent(QContextMenuEvent* event)
{
  if (QGraphicsItem *item = itemAt(event->pos())) {
    MyRect* rect = dynamic_cast<MyRect*>(item);
    QGraphicsSceneContextMenuEvent* context_event = dynamic_cast<QGraphicsSceneContextMenuEvent*>(event);
    if (rect && context_event)
      rect->contextMenuEvent(context_event);
  }
  else {
    QMenu menu;
     ... create the QGraphicsView popup menu
  }
}

QGraphicsSceneContextMenuEvent的dynamic_cast失败,因此我从不为rect调用contextMenuEvent。 如果仅尝试将事件传递给rect-> contextMenu(),它将无法编译,因此我尝试了强制类型转换。

什么是正确的方法?

这是一个学习项目,仅使用Qt创建/移动/旋转/删除2D形状。 如果有人想看整个事情,请告诉我。

好的,我知道了。 只要确保通过基类方法传递事件即可。 简单! 这也适用于mousePressEvent(),mouseMoveEvent()和mouseReleaseEvent函数。

void CustomGraphicsView::contextMenuEvent(QContextMenuEvent* event)
{
  // if the event is on a GGraphicsItem just pass the event along
  if (itemAt(event->pos())) {
    QGraphicsView::contextMenuEvent(event);
  }
  else
  {
    QMenu menu;
    ... create popup for the CustomGraphicsView

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM