ユーザーがシーンの空き部分を右クリックしたときにポップアップを表示する方法はありますか?QGraphicsSceneでポップアップメニューを表示クリックまたは右クリック
私はQtが新しく、スロットとサブクラスを試しましたが、役に立たないです。
はありません、このようなスロットと、それぞれ:
"error: 'QMouseEvent' has not been declared"
onMouseRelease
イベントを実装しようとしています。
ユーザーがシーンの空き部分を右クリックしたときにポップアップを表示する方法はありますか?QGraphicsSceneでポップアップメニューを表示クリックまたは右クリック
私はQtが新しく、スロットとサブクラスを試しましたが、役に立たないです。
はありません、このようなスロットと、それぞれ:
"error: 'QMouseEvent' has not been declared"
onMouseRelease
イベントを実装しようとしています。
QGraphicsViewは、QGraphicsSceneの内容を表示するために使用されるウィジェットです。したがって、コンテキストメニュー(ポップアップメニュー)を実装する正しい場所はQGraphicsViewです。あなたはContextMenuEventに関数を再実装する必要が
がQGraphicsViewから継承する独自のクラスです:
void YourGraphicsView::contextMenuEvent(QContextMenuEvent *event)
{
QMenu menu(this);
menu.addAction(...);
menu.addAction(...);
...
menu.exec(event->globalPos());
}
もQtのMenus Example参照してください。
あなたは再実装することができますが、シーンにアクセスできるようになりますQGraphicsScene
クラスのcontextMenuEvent
方法は、座標だけでなく、スクリーン座標(QGraphicsView
とは反対に、また動作しますが、この情報はありません):
void YourGraphicsScene::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
{
// event->scenePos() is available
QMenu menu(this);
menu.addAction(...);
menu.addAction(...);
...
menu.exec(event->screenPos());
}
これは良い解決策です。 Qメニューメニュー(これ)。動作しません。 QMenuメニュー(event-> widget())を使うことができます。アクティブなウィジェットをQMenuのQWidget親として機能させる。 – gamecreature
実際には、メニューを親にする必要はありません。 QMenuメニュー()はうまく動作します。コンテキストメニューはそれ自体のウィンドウであり、画面座標に配置されているからです。 –
ありがとうございます!それは機能しましたが、私はいくつかの変更を行う必要がありました。 1.まず、自分のプロジェクトタイプがQt GUIアプリケーションであるため、QGraphicsViewを自分で置き換える必要がありました。これは、手動で.uiファイルを編集し、オブジェクトのクラス名を置き換えることで行いました。 2. QGraphicsViewサブクラス化のために次の例を使用しました:http://doc.trolltech.com/4.3/graphicsview-elasticnodes.html。親ウィジェットのパラメータを含むようにコンストラクタを修正しなければならなかった:GraphWidget(QWidget * parent)[...]。次に、このクラスでコンテキストメニューイベントを実装するだけで、そのトリックが実現しました。 – TudorT
手動で.uiファイルを手動で変更する必要なく、別の方法で実行できましたか? – TudorT
ウィジェットのコンテキストメニューの "promote to ..."アクションを使用して、QtCreatorのデザインビューでも、ウィジェットクラスをQGraphicsViewから独自のクラスに変更することができます。 –