QMenu - shortcut is not triggered
-
What is correct way to use QAction shortcuts? I have QTableView with custom context menu where beside other actions I want to have action
Refresh F5QAction *a; a = mPopup.addAction(IconsManager::icon(fa::refresh), "Refresh", this, &UserPlaylistsSubWidget::refreshList, QKeySequence(Qt::Key_F5)); a->setShortcutVisibleInContextMenu(true);First, I had to set
setShortcutVisibleInContextMenuto make it visible in context menu but action is still not triggered when press F5 (QTableView is active and focused widget). Tried also different values forQAction::setShortcutContextbut still no result.
Here is code which rise popup:connect(ui->list, &QWidget::customContextMenuRequested, this, &UserPlaylistsSubWidget::popUp); void UserPlaylistsSubWidget::popUp(const QPoint &pos) { mPopup.popup(ui->list->viewport()->mapToGlobal(pos)); } -
Figured it out. Didn't know that QTableView has own actions list and can show it in own popup with
setContextMenuPolicy(Qt::ActionsContextMenu). So here is correct solution and F5 shortcut works as expected:QAction *a = new QAction(IconsManager::icon(fa::refresh), "Refresh", ui->list); a->setShortcut(QKeySequence(Qt::Key_F5)); a->setShortcutVisibleInContextMenu(true); connect(a, &QAction::triggered, this, &UserPlaylistsSubWidget::refreshList); ui->list->addAction(a); -
HI,
Out of curiosity, why is it a shortcut specific to a contextual menu ? Looks like it would make more sense as a general action.
-
Figured it out. Didn't know that QTableView has own actions list and can show it in own popup with
setContextMenuPolicy(Qt::ActionsContextMenu). So here is correct solution and F5 shortcut works as expected:QAction *a = new QAction(IconsManager::icon(fa::refresh), "Refresh", ui->list); a->setShortcut(QKeySequence(Qt::Key_F5)); a->setShortcutVisibleInContextMenu(true); connect(a, &QAction::triggered, this, &UserPlaylistsSubWidget::refreshList); ui->list->addAction(a); -
Side note: you can add actions to all QWidget based classes.