當用戶在場景的空白部分點擊右鍵時,是否可以顯示彈出菜單?在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());
}
這是一個很好的解決方案。 QMenu菜單(this);不起作用。你可以使用QMenu菜單(event-> widget());讓活動小部件充當QMenu的QWidget父項。 – gamecreature
實際上,似乎沒有必要給菜單一個父母。 QMenu menu()工作得很好,因爲上下文菜單本身就是一個窗口,並且正在屏幕座標中定位。 –
謝謝!它的工作,但我需要做一些改變。 1.首先,因爲我的項目類型是Qt GUI應用程序,所以我需要用我自己的QGraphicsView替換。我通過手動編輯.ui文件並替換該對象的類名來完成此操作。 2.我爲QGraphicsView子類使用了以下示例:http://doc.trolltech.com/4.3/graphicsview-elasticnodes.html。我不得不修改構造函數以包含父窗口小部件的參數:GraphWidget(QWidget * parent)[...]。然後,簡單地在這個類中實現上下文菜單事件就可以實現。 – TudorT
我可以以不同的方式做到這一點,也許不需要手動手動修改.ui文件? – TudorT
您也可以在QtCreator的設計視圖中使用「小工具」的上下文菜單中的「promote to ...」動作將QGraphicsView中的窗口小部件類更改爲您自己的類。 – 2012-05-26 15:21:05