如何将多个QShortcuts连接到Qt中的一个插槽?并找出哪个快捷方式发出的插槽内?

时间:2012-02-21 02:22:34

标签: qt signals signals-slots

是否可以传递参数?

这样的事情:

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

2 个答案:

答案 0 :(得分:3)

如果快捷方式无关紧要,请使用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

答案 1 :(得分:0)

好吧,为了完全你要问的内容,你可以跟踪你所有的QShortcut对象,然后使用你的插槽内的sender()函数来确定导致的QShortcut要触发的插槽。

然而,听起来你真的想考虑使用和覆盖QWidget::keyPressEvent(),如果可能的话。要求QKeyEvent对象按下哪个键比执行所有这些疯狂的QShortcut混乱要容易得多。