2013-11-19 4 views
0

Я использую пользовательский QGraphicsWidget, и когда я нажимаю на него правой кнопкой мыши, я хочу открыть меню. Я начинаю это так:QMenu отображается за пределами главного окна

void myQGraphicsWidget::mousePressEvent(QGraphicsSceneMouseEvent *event){ 
    if(event->button() & Qt::RightButton){ 
     const QString test = "test"; 
     QMenu menu; 
     menu.setTitle(test); 
     menu.addAction(test); 
     menu.exec(mapToScene(event->pos()).toPoint()); 
     //menu.exec(mapToScene(QPointF(0,0)).toPoint()); 
    } 
} 

но меню появляется путь за пределами главного окна приложения к нижней правой части моего другого монитора. Когда я использую прокомментированную версию, она появляется в верхней части моего главного окна. Я попытался настроить точку вручную, чтобы массировать ее внутри окна, но она просто прыгает, чтобы либо опираться на верхнюю часть окна, либо висела снизу, а не внутри.

ответ

0

QMenu::exec занимает глобальное положение; вы относитесь к позиции, связанной с виджетами, и сопоставляете ее с позицией сцены.

Попробуйте вместо этого:

menu.exec(event->screenPos()); 
+0

Какого типа событие имеет) функцию члена globalPos (? Я смог получить мой QMenu, который, наконец, будет отображаться в главном окне, но он немного выключен. Я называю это как menu.exec (event-> widget() -> mapToGlobal (event-> pos(). ToPoint())); Я мог бы просто вручную подбросить некоторые смещения, чтобы они выглядели близко, но я хотел бы знать, есть ли лучший способ сделать это сейчас. – RidesTheShortBus

+0

@RidesTheShortBus О, я не заметил, что это был «QGraphicsSceneMouseEvent». Но я думаю, что 'screenPos()' эквивалентен. Отредактировал мой ответ. –

+0

QContextMenuEvent имеет член globalPos(). По моему опыту, QMenu.exec() не откроет меню вне окон приложения. Для QContextMenuEvent от пользователя, нажимающего ContextMenuKey, когда указатель находится за окнами приложения, событие pos() равно (0,0), не соглашаясь с globalPos(). Возможно, руководство по человеческому интерфейсу говорит о том, что вы не должны открывать меню вне окон вашего приложения, а Qt обеспечивает его соблюдение? Это связано, но не так, как с вашей проблемой. – bootchk

Смежные вопросы