사용자가 장면의 빈 부분을 마우스 오른쪽 버튼으로 클릭 할 때 팝업을 표시하는 방법이 있습니까?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 메뉴()는 상황에 맞는 메뉴가 그 자체의 창이고 화면 좌표에 배치되기 때문에 정상적으로 작동합니다. –
감사! 그것은 효과가 있었지만 몇 가지 변화가 필요했습니다. 1. 첫째, 내 프로젝트 유형이 Qt GUI 응용 프로그램이므로 주어진 QGraphicsView를 내 자신의 것으로 대체해야했습니다. 저는 .ui 파일을 수동으로 편집하고 객체의 클래스 이름을 바꾸어서이 작업을 수행했습니다. 2. QGraphicsView 서브 클래 싱에 대해 다음 예제를 사용했습니다. http://doc.trolltech.com/4.3/graphicsview-elasticnodes.html. 상위 위젯에 대한 매개 변수를 포함하도록 생성자를 수정해야했습니다. GraphWidget (QWidget * parent) [...]. 그런 다음이 클래스에서 상황에 맞는 메뉴 이벤트를 구현하는 것이 트릭을 만들었습니다. – TudorT
수동으로 .ui 파일을 수동으로 수정하지 않아도 다르게 할 수 있습니까? – TudorT
위젯의 컨텍스트 메뉴에서 "to promote ..."액션을 사용하여 QtCreator의 디자인 뷰에서 위젯 클래스를 QGraphicsView에서 자신의 클래스로 변경할 수 있습니다. –