Назначьте сочетания клавиш для кнопок - Qt C ++ - PullRequest
20 голосов
/ 07 января 2011

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

Ответы [ 4 ]

42 голосов
/ 08 января 2011

Возможно, у ваших кнопок есть слот, подключенный к их сигналу clicked().

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

Inваш код, #include <QShortcut>, а затем вы сможете добавить комбинацию клавиш для слота, например:

QShortcut *shortcut = new QShortcut(QKeySequence("Ctrl+O"), parent);
QObject::connect(shortcut, SIGNAL(activated()), receiver, SLOT(yourSlotHere()));

где parent является родителем вашего ярлыка (например, главного окна), yourSlotHere() - имя слота, для которого вы хотите, чтобы ярлык вызывался, и receiver объект, в котором yourSlotHere().

Замените "Ctrl+O" на любой ярлык, который вы хотите назначить.

Вы также можете найти больше информации на странице документации для QShortcut .

14 голосов
/ 29 августа 2011

В качестве альтернативы, если клавиша быстрого вызова соответствует некоторому символу в тексте кнопки, вы можете подготовить & к этому символу. Если вам нужен литерал &, используйте &&.

3 голосов
/ 19 июня 2016

Сегодня (Qt5.7) мы можем назначать ярлыки непосредственно в Qt Designer, используя свойство ярлык :

enter image description here

Очень удобно ... Даже если немного глючит: мне нужно «проверить» ярлык, щелкнув другое свойство того же виджета, прежде чем переключаться на другой виджет!

Но это работает.

1 голос
/ 01 июля 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...