Подтвердить что ты не робот

Назначение клавиш быстрого доступа кнопкам - Qt С++

Я создал графический интерфейс с помощью Qt Creator. То есть, перетащив виджеты. Теперь я хочу назначить клавиши быстрого доступа для всех кнопок. Может кто-нибудь здесь, пожалуйста, дайте мне знать, как это сделать? Заранее благодарю вас.

4b9b3361

Ответ 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. В противном случае вы можете легко установить ярлыки в дизайнере, как предлагает другой ответ.