如何将多个 QShortcuts 连接到 Qt 中的一个插槽?并找出插槽内是哪个快捷方式发出的?
Posted
技术标签:
【中文标题】如何将多个 QShortcuts 连接到 Qt 中的一个插槽?并找出插槽内是哪个快捷方式发出的?【英文标题】:How to connect multiple QShortcuts to one slot in Qt? And find out inside the slot which shortcut emitted it? 【发布时间】:2012-02-21 02:22:34 【问题描述】:可以传参数吗?
类似这样的:
-
shortcut_key_one,channelSLot(int)
shortcut_key_two,channelSLot(int)
shortcut_key_three,channelSLot(int)
【问题讨论】:
【参考方案1】:如果快捷方式无关紧要,请使用QAction::setShortcuts
将快捷方式分配给QAction
。
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。
【讨论】:
【参考方案2】:好吧,完全按照您的要求进行操作,您可以跟踪所有 QShortcut 对象,然后使用插槽内的 sender() 函数来确定哪个 QShortcut 导致了插槽被触发。
但是,如果可能的话,听起来您非常想考虑使用和覆盖QWidget::keyPressEvent()
。询问 QKeyEvent 对象按下了哪个键比做所有这些疯狂的 QShortcut 混乱要容易得多。
【讨论】:
以上是关于如何将多个 QShortcuts 连接到 Qt 中的一个插槽?并找出插槽内是哪个快捷方式发出的?的主要内容,如果未能解决你的问题,请参考以下文章
Qt 5.7 - QWebEngineView - 将 HTML 按钮单击事件连接到 C++/Qt 插槽