QMenu - ярлык не запускается - PullRequest
       33

QMenu - ярлык не запускается

0 голосов
/ 02 апреля 2019

Как правильно использовать ярлыки QAction? У меня есть QTableView с пользовательским контекстным меню, где помимо других действий я хочу иметь действие Refresh F5:

// Popup
QAction *a;
a = mPopup.addAction(IconsManager::icon(fa::refresh), "Refresh", this, &UserPlaylistsSubWidget::refreshList, QKeySequence(Qt::Key_F5));
a->setShortcutVisibleInContextMenu(true);

Сначала я должен был установить setShortcutVisibleInContextMenu, чтобы сделать его видимым в контекстном меню, но действие по-прежнему не запускается при нажатии F5 (QTableView является активным и сфокусированным виджетом). Пробовал также разные значения для QAction::setShortcutContext, но по-прежнему нет результата.

Qt 5.12. Linux (KDE Neon)

Редактировать: вот код, который всплывает всплывающее

connect(ui->list, &QWidget::customContextMenuRequested, this, &UserPlaylistsSubWidget::popUp);

void UserPlaylistsSubWidget::popUp(const QPoint &pos)
{
    mPopup.popup(ui->list->viewport()->mapToGlobal(pos));
}

1 Ответ

0 голосов
/ 03 апреля 2019

Разобрался. Не знал, что QTableView имеет собственный список действий и может показывать его в собственном всплывающем окне с setContextMenuPolicy(Qt::ActionsContextMenu). Итак, вот правильное решение, и ярлык F5 работает как положено:

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);
...