Я не уверен, понял ли я, что вы хотите;но если вы хотите отобразить всплывающее меню по щелчку правой кнопкой мыши, вы должны сначала в заголовочном файле вашего виджета (или класса окна) переопределить функцию, связанную с событием мыши, и объявить некоторую функцию, которая покажет ваше всплывающее меню.Итак, заголовочный файл должен содержать следующие объявления:
...
void Popup(const QPoint& pt);
void mousePressEvent(QMouseEvent *event);
...
А в файле cpp определения функций:
void testQt::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::RightButton) {
this ->Popup(event ->pos());
event->accept();
}
}
void testQt::Popup(const QPoint& pt)
{
QPoint global = this ->mapToGlobal(pt);
QMenu* pPopup = new QMenu(this);
QAction* pAction1 = new QAction("Item 1", this);
QAction* pAction2 = new QAction("Item 2", this);
pPopup ->addAction(pAction1);
pPopup ->addAction(pAction2);
QAction* pItem = pPopup ->exec(global);
if(pItem == pAction1)
{
}
else if(pItem == pAction2)
{
}
}
Теперь, когда вы нажимаете правую кнопку мыши, появляется всплывающее менюв позиции курсора.Надеюсь, это поможет.
ПРИМЕЧАНИЕ. Если вы хотите определить, какая из кнопок мыши нажата при выборе действия, вы должны унаследовать свой собственный класс от QMenu.Класс QMenu содержит защищенную функцию mousePressEvent(QMouseEvent *event)
, которую следует переопределить, и вы сможете определить, нажата ли левая или правая кнопка мыши, когда в меню выбран элемент.