qt: изменить триггер qcontextmenu

#qt #contextmenu

#qt #contextmenu

Вопрос:

Обычно при нажатии правой кнопки мыши вызывается QContextMenuEvent. Но возможно ли изменить кнопку? Я имею в виду, что я хочу использовать левую кнопку мыши с модификатором «ALT». Я пытаюсь получить к НЕМУ доступ в mousePressEvent, но он работает неправильно.

Комментарии:

1. Пожалуйста, покажите, как вы пытаетесь это сделать.

Ответ №1:

Вы можете сделать это, создав подкласс QWidget:

 class MyWidget : public QWidget
{
public:
    MyWidget(QWidget *parent = 0);

protected:
    void mouseReleaseEvent(QMouseEvent *event);
};
  

И его реализация:

 MyWidget:: MyWidget(QWidget *parent): QWidget(parent)
{
}

void MyWidget::mouseReleaseEvent(QMouseEvent *event)
{
    QMenu menu;
    QAction *act1 = menu.addAction("action1");
    QAction *act2 = menu.addAction("action2");
    if(event->button() == Qt::LeftButtonamp;amp;
            event->modifiers()amp;Qt::AltModifier){

        QAction *selectedAction = menu.exec(event->globalPos());
        if(selectedAction == act1)
        {
            //do something
        }else if( selectedAction == act2 ){
            //do something else
        }
    }
}
  

Комментарии:

1. Связано ли это с «mouseReleaseEvent». Я последовал вашему предложению, и это решило некоторые проблемы. Я использую это решение в QGraphicsScene и QGraphicsItem, и я не хочу выбирать элемент при отображении меню.