Получение выбранного пункта меню

Я реализую меню времени выполнения на кнопке (QPushButton) в моем приложении. Пользователь должен сделать выбор между ftp и http, когда он нажимает кнопку загрузки.

QMenu menu(this); 
menu.addAction("ftp");
menu.addAction("http");
ui.mUploadBtn->setMenu(&menu);
ui.mUploadBtn->showMenu();

Мой вопрос заключается в том, как я могу узнать, какой выбор выбрал пользователь, или какая-либо их функция, чтобы получить это.

благодарю вас


person bhupinder    schedule 20.01.2014    source источник


Ответы (1)


Один из способов получить результат меню - сделать это:

 QAction* action = menu.exec(QCursor::pos());

Затем вы можете использовать

action->text()==QString("ftp")

Чтобы узнать, нажал ли пользователь на «FTP».

Итак, как сказал Фрэнк Остерфельд в комментариях, вы также можете создать слот в своем классе и подключить к нему сигнал действия триггера меню:

connect(&menu, SIGNAL(triggered(QAction*)), this, SLOT( sl_OnMenuTriggered(QAction* )));

void sl_OnMenuTriggered(QAction* _action)
{
if(_action->text()=="ftp") ...
}

Это "неблокирующий" способ.

person Adrien BARRAL    schedule 20.01.2014
comment
Или подключитесь к QMenu::triggered(QAction*), если вы хотите использовать showMenu() или какой-либо другой неблокирующий способ отображения меню. - person Frank Osterfeld; 20.01.2014
comment
menu.exec() не показывает меню в нужном месте после нажатия кнопки загрузки, оно показывает меню в левом верхнем углу экрана - person bhupinder; 20.01.2014
comment
Хорошо, вы можете использовать второй способ, который я представил в своем ответе, или menu.exec(QCursor::pos()); - person Adrien BARRAL; 20.01.2014
comment
извините, я не поместил &меню в соединение - person bhupinder; 20.01.2014
comment
Хорошо.. исправлено, я не видел, когда одобрял издание :) - person Adrien BARRAL; 20.01.2014