2012-04-06 5 views
1

Это произошло для каждых QDialog I pop, которые срабатывают либо из mouseReleaseEvent в QGraphicsItem, либо из QContextMenu. Я не понимаю, в чем проблема - код довольно прост ..Закрытие QDialog, запущенного с mouseReleaseEvent RightClick приводит к появлению пустого контекстного меню

... 
void MyQGfxItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) 
{ 
    if(event->button() == Qt::RightButton) 
    { 
     MyDialog someDlg; 
     if(someDlg.exec()) 
     { 

     } 
    } 
} 
... 

Как только диалог закрыт, либо через OK или Отмена, пустое контекстное меню, где событие было вызвано:

enter image description here

пустой элемент, кажется, контролировать, если мой QDockWidget скрыт или видно .. Любая идея, что происходит? Многочисленные поисковые запросы Google оставили меня застрявшим.

Edit - это выглядит, как это происходит только при использовании правой кнопки мыши ..

+0

Вы пробовали принять мероприятие? Например, в вашем mouseReleaseEvent вы вызываете event-> accept(). – Anthony

+0

Почему вы не используете настраиваемое контекстное меню, а не используете сырые события мыши? – alexisdm

+0

Проблема в том, что я даже не хочу, чтобы появилось контекстное меню. Правые клики по какой-то причине показывают «пустое» контекстное меню, которое управляет QDockWidget – giraffee

ответ

0

Ha! Понял. Похоже, что QMainWindow захватывает события щелчка правой кнопкой мыши после того, как все будет завершено. Вызов this-> setContextMenuPolicy (Qt :: NoContextMenu) в QMainWindow подавил его.

+0

Это немного взломанный. Что делать, если в главном окне вам нужны контекстные меню? Вероятно, стоит выяснить, почему событие распространяется таким образом и фиксирует его, а не продолжает его распространять, а просто полностью блокирует контекстные меню в конце. – Anthony

+0

Дело в том, что в моем коде я не определил контекстное меню с пустым элементом, который управляет моим QDockWidget - я понятия не имею, откуда он будет. – giraffee

+0

@David: Когда вы добавляете QDockWidget в QMainWindow, элемент, соответствующий имени вашего QDockWidget, добавляется в контекстное меню QMainWindow, которое переключает его видимость. Он пуст, потому что вы не передали имя конструктору QDockWidget. – Bill

2

Согласно документации для QEvent, вы должны принять() события, которые вы не хотите, распространяющейся родительский виджет. Так что где-то в вашем mouseReleaseEvent, вы должны просто добавить

event->setAccepted(true); 

или

event->accept(); 

Обратите внимание, что вы также должны поместить этот код в mousePressEvent тоже.

+0

Пробовал - это контекстное меню все еще срабатывает – giraffee

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

  • Нет связанных вопросов^_^