Как подключить несколько QShortcuts к одному слоту в Qt?И узнать внутри слота, какой ярлык его испустил? - PullRequest
0 голосов
/ 21 февраля 2012

Можно ли передать параметры?

Примерно так:

  1. shortcut_key_one, channelSLot (int)
  2. shortcut_key_two, channelSLot (int)
  3. shortcut_key_three, channelSLot (int)

Ответы [ 2 ]

3 голосов
/ 21 февраля 2012

Если не имеет значения, какой был ярлык, назначьте ярлыки для QAction, используя QAction::setShortcuts.

font_increase_action_ = new QAction(tr("&Increase font sizes"), this);
font_increase_action_->setShortcuts(QList<QKeySequence>()
                                    << Qt::CTRL + Qt::Key_BracketRight
                                    << Qt::CTRL + Qt::Key_Greater);
connect(font_increase_action_, SIGNAL(triggered()), SLOT(IncreaseFontSizes()));

Если вам действительно нужно знать, какой ярлык был нажат, вы можете назначить каждый из них для отдельного QAction, а затем использовать QSignalMapper .

0 голосов
/ 21 февраля 2012

Ну, чтобы сделать точно то, что вы просите, вы можете отслеживать все ваши объекты QShortcut и затем использовать функцию sender () внутри вашего слота, чтобы определить, какой QShortcut вызвал слот длябыть запущенным.

Однако, похоже, вы серьезно хотите рассмотреть возможность использования и переопределения QWidget::keyPressEvent() вместо этого, если это вообще возможно.Было бы намного проще спросить объект QKeyEvent, какая клавиша была нажата, чем делать весь этот безумный беспорядок в QShortcut.

...