Я создал графический интерфейс с помощью Qt Creator. То есть, перетащив виджеты. Теперь я хочу назначить клавиши быстрого доступа для всех кнопок. Может кто-нибудь здесь, пожалуйста, дайте мне знать, как это сделать? Заранее благодарю вас.
Назначение клавиш быстрого доступа кнопкам - Qt С++
Ответ 1
У ваших кнопок, вероятно, есть слот, подключенный к их сигналу clicked()
.
Чтобы добавить сочетания клавиш, вы просто подключите ярлык activated()
к одному слоту.
В вашем коде #include <QShortcut>
и затем вы сможете добавить комбинацию клавиш для слота, подобного этому:
QShortcut *shortcut = new QShortcut(QKeySequence("Ctrl+O"), parent);
QObject::connect(shortcut, SIGNAL(activated()), receiver, SLOT(yourSlotHere()));
Если родительский элемент вашего ярлыка (например, главное окно), yourSlotHere()
- это имя слота, для которого требуется вызов ярлыка, и receiver
объект, где yourSlotHere()
.
Замените "Ctrl+O"
на любой ярлык, который вы хотите назначить.
Вы также можете найти дополнительную информацию на странице документации QShortcut.
Ответ 2
В качестве альтернативы, если клавиша быстрого вызова соответствует некоторому символу в тексте кнопки, вы можете предварительно подставить и к этому символу. Если вы хотите использовать литерал &, использовать & &.
Ответ 3
Сегодня (Qt5.7) мы можем назначить ярлыки непосредственно в Qt Designer, используя свойство shortcut:
Довольно удобно... Даже если немного багги: я должен "проверить" ярлык, щелкнув другое свойство того же виджета, прежде чем переключиться на другой виджет!
Но он работает.
Ответ 4
С хорошей точки зрения UI/UX то, что вы на самом деле хотите, - это не просто запуск того же слота, что и триггеры кнопок (что является решением, предложенным принятым ответом), но вы также хотите визуально оживить нажатие кнопки, чтобы сделать убедитесь, что пользователь явно может визуально заметить инициируемое действие. Следующее - это то, что я использую, например, для своих "подтверждений" QPushButtons
.
// I have this function in my 'utils' module.
void bindShortcut(QAbstractButton *button, const QKeySequence &shortcut)
{
QObject::connect(new QShortcut(shortcut, button), &QShortcut::activated, [button](){ button->animateClick(); });
}
// and then I use it like this
auto *confirmButton = new QPushButton(tr("Confirm"));
connect(confirmButton, &QPushButton::clicked, ... some slot of yours to do the actual work);
bindShortcut(confirmButton, Qt::Key_Enter);
bindShortcut(confirmButton, Qt::Key_Return);
Это, я думаю, лучший ответ, если вы не используете QtDesigner. В противном случае вы можете легко установить ярлыки в дизайнере, как предлагает другой ответ.