2016-06-01 2 views
1

У меня есть QGraphicsView в моем MainWindow, и у меня есть пользовательская функция «захвата» на моем холсте (которая является QGraphicsView внутри моего MainWindow), когда я нажимаю обе кнопки мыши.Контекстное меню на пользовательском ярлыке

Так что я хочу активировать свое контекстное меню только тогда, когда нажимаю CTRL + правый щелчок и не могу активировать только одним щелчком правой кнопки мыши. Было бы важно сохранить политику ActionsContextMenu.

Есть ли способ сделать это?

+0

Похоже, вы должны подклассифицировать событие мыши на холсте, чтобы сделать это. –

ответ

1

Просто зарегистрируйтесь на KeyboardModifier. Вы можете указать, какой модификатор вы хотите. В вашем случае это ControlModifier. Затем переопределить метод mousePressEvent():

void yourClass::mousePressEvent(QMouseEvent *event) 
{ 
    if (event->button() == Qt::RightButton && 
     event->modifiers() == Qt::ControlModifier) 
    { 
     // call your context menu 
    } 
} 

Если вы хотите использовать это, вам нужно позвонить QMenu. Просто добавьте эту функцию в свой класс:

void yourClass::showMenu() 
{ 
    QMenu contextMenu(this); 

    QAction action("My Action", this); 
    contextMenu.addAction(&action); 

    contextMenu.exec(); 
} 
+0

Но как я могу назвать свое контекстное меню? Для меня теперь это автоматический, я просто добавил к нему действия. –

+0

Что значит автоматическое? Покажите свой код в меню, затем – IAmInPLS

+0

У меня нет кода для меню. Я только что изменил ContextMenuPolicy в ActionsContextMenu в PropertyEditor и добавил действие в ActionEdior. И теперь, когда я нажимаю правой кнопкой мыши, у меня есть контекстное меню. –

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