9

ユーザーがシーンの空の部分を右クリックしたときにポップアップを表示する方法はありますか?

私はQtに不慣れで、スロットとサブクラス化を試しましたが、役に立ちませんでした。

そのようなスロットはなく、それぞれ:

「エラー:「QMouseEvent」は宣言されていません」

onMouseReleaseイベントを実装しようとしたとき。

4

2 に答える 2

11

QGraphicsViewは、QGraphicsSceneのコンテンツを表示するために使用されるウィジェットです。したがって、コンテキストメニュー(ポップアップメニュー)を実装する正しい場所はQGraphicsViewです。

contextMenuEvent関数を再実装する必要があります。これは、QGraphicsViewから継承された独自のクラスです。

void YourGraphicsView::contextMenuEvent(QContextMenuEvent *event)
{
    QMenu menu(this);
    menu.addAction(...);
    menu.addAction(...);
    ...
    menu.exec(event->globalPos());
}

Qtのメニューの例も参照してください。

于 2012-05-26T14:00:29.587 に答える
11

contextMenuEventクラスのメソッドを再実装できQGraphicsSceneます。これにより、シーンの座標と画面の座標にアクセスできるようになります(QGraphicsViewこれは機能しますが、この情報はありません)。

void YourGraphicsScene::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
{
    // event->scenePos() is available
    QMenu menu(this);
    menu.addAction(...);
    menu.addAction(...);
    ...
    menu.exec(event->screenPos());
}
于 2012-12-24T02:19:34.930 に答える