2012-02-16 2 views
7

У меня есть Qaction на элемент меню для удаления выбранных элементов в одном из моих представлений. Вот как я создать действие:QAction ярлык не всегда работает

deleteAct = new QAction(tr("Delete Selected"), this); 
deleteAct->setShortcut(QKeySequence::Delete); 
connect(deleteAct, SIGNAL(triggered()), this, SLOT(deleteSelected())); 

I настроить сочетание клавиш (Delete Key), который должен вызвать действие delectAct. Он работает большую часть времени, но в некоторых случаях он перестает работать ... Кто-нибудь знает, почему ярлык перестанет работать?

Примечание: действие все еще работает, если я вызываю его из пункта меню. Его просто ярлык, который не ...

ответ

18

Вам нужно добавить действие в виджет, так как это виджет, который будет прослушивание ключевых событий. Предполагая, что «это» является MainWindow, просто сделать

addAction(deleteAct); 

Обратите внимание, что вы можете добавить такое же действие на несколько виджетов (то вся суть отделенной концепции действия). Так что хорошо добавить его к главному окну и в меню.

+0

+1 Мои ярлыки контекстного меню не работали так, как я хотел, пока я не добавил в действие главного окна тоже. – rendon

+0

Кроме того, action-> setShortcutContext (...); должен быть установлен, см. ответ пользователя362638. – Tob

+0

Не обязательно; контекстный контекстный контекст по умолчанию - Qt :: WindowShortcut, что вам нужно в примере исходного плаката. Вы не хотите, чтобы клавиша Delete удаляла выбранный элемент в окне A, если, конечно, нажав кнопку «Удалить» в окне B. Qt :: ApplicationShortcut имеет смысл для ярлыков на уровне приложений (т. Е. Ярлыков, которые должны работать из любого окна приложения). –

6

Попробуйте изменить shortcut context действия, например:

deleteAct->setShortcutContext(Qt::ApplicationShortcut); 
0

Не видя полного кода, я бы рискнул предположить, что где-то он включается/отключается. Убедитесь, что ярлык попадает в конструктор, а не отключается где-то в другом месте из-за настройки.

Смежные вопросы