如何将多个 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:如何将不同类的静态信号连接到插槽?

如何将相机预览流从android连接到Qt5?

Qt:如何将类连接到自定义 Qt 设计器小部件

Qt 5.7 - QWebEngineView - 将 HTML 按钮单击事件连接到 C++/Qt 插槽

QT:将 QMediaPlayer 连接到 QProgressBar?

如何在 qt 设计器中将功能连接到 qt 小部件? - Python