Qt

Контекстное меню в Qt. Popup Menu

Представим, что на форме нужен некий объект, при нажатии правой кнопкой мыши на который вызовется его контекстное меню. Чтобы организовать работу контекстного меню в конструкторе формы напишем

ui->pushButton->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->pushButton, SIGNAL(customContextMenuRequested(const QPoint&)), 
		this, SLOT(ShowContextMenu(const QPoint&)));

Если мы привязываем объект pushButton. Здесь можно указать интересующий лично вас объект.

Дальше создаем функцию-слот ShowContextMenu(const QPoint&):

void MyClass::ShowContextMenu(const QPoint& pos)
{
// for most widgets
QPoint globalPos = ui->pushButton->mapToGlobal(pos);
// for QAbstractScrollArea and derived classes you would use:
// QPoint globalPos = myWidget->viewport()->mapToGlobal(pos);
QMenu myMenu;
myMenu.addAction("Пункт 1", this, SLOT(on_action_1()));
myMenu.addAction("Пункт 2", this, SLOT(on_action_2()));
myMenu.exec(globalPos);
}
void MyClass::on_action_1()
{
//тело слота on_action_1
}
void MyClass::on_action_2()
{
//тело слота on_action_2
}

Функцию ShowContextMenu(const QPoint&) не забываем вставить в список слотов в h-файле. Так же, как и слоты on_action_1() и on_action_2().

Слоты on_action_1() и on_action_2() отвечают за те действия, что произойдут после выбора соответствующих пунктов контекстного меню.

У метода addAction() есть несколько возможных параметров, можно указать иконку, сочетание клавиш как shortcut и пр. Описание можно найти в документации.

Оставьте своё мнение...

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.