要将按键绑定到操作,QShortCut 负责。
QShortcut 类提供了一种将键盘快捷键连接到 Qt 的信号和插槽机制的方法,以便在执行快捷键时通知对象。快捷方式可以设置为包含描述键盘快捷方式所需的所有按键,包括 Shift、Ctrl 和 Alt 等修饰键的状态。
在某些小部件上,在字符前使用“&”会自动为该字符创建助记符(快捷方式),例如"E&xit" 将创建快捷方式 Alt+X(使用 '&&' 显示实际的 & 符号)。小部件可能会使用给定的快捷方式并对其执行操作。在 X11 上,与号将不显示,字符将带有下划线。在 Windows 上,通常在用户按下 Alt 键之前不会显示快捷方式,但这是用户可以更改的设置。在 Mac 上,默认情况下禁用快捷方式。调用 qt_set_sequence_auto_mnemonic() 来启用它们。然而,由于助记快捷键不符合 Aqua 的指导方针,Qt 不会显示快捷键字符下划线。
对于使用菜单的应用程序,使用 QMenu 类中提供的便捷函数在创建菜单项时为其分配键盘快捷键可能更方便。或者,快捷方式可以与 QAction 类中的其他类型的操作相关联。
为特定小部件创建快捷方式的最简单方法是使用按键序列构建快捷方式。例如:
shortcut = new QShortcut(QKeySequence(tr("Ctrl+O", "File|Open")),
parent);
当用户键入给定快捷键的按键序列时,会发出该快捷键的激活() 信号。 (在有歧义的情况下,发出activatedAmbiguously() 信号。)当快捷方式的父窗口小部件接收事件时,Qt 的事件循环会“侦听”快捷方式。
小样本testQDockWidgetShortCut.cc:
#include <QtWidgets>
int main(int argc, char **argv)
{
qDebug() << "Qt Version:" << QT_VERSION_STR;
QApplication app(argc, argv);
// setup GUI
QMainWindow qMainWin;
QDockWidget qDockB("Panel B");
qDockB.setAllowedAreas(Qt::AllDockWidgetAreas);
qMainWin.addDockWidget(Qt::RightDockWidgetArea, &qDockB);
qDockB.hide();
// a window action to show dock on [A]
QAction qCmdShowDockB(&qMainWin);
qCmdShowDockB.setShortcut(QKeySequence("A"));
qMainWin.addAction(&qCmdShowDockB);
// a window action to hide dock on [B]
QAction qCmdHideDockB(&qMainWin);
qCmdHideDockB.setShortcut(QKeySequence("B"));
qMainWin.addAction(&qCmdHideDockB);
// a button to toggle dock B
QPushButton qBtn(
"Show/Hide Panel B\n"
"[A] ... Show Panel B\n"
"[B] ... Hide Panel B\n"
"[Ctrl+B] ... Toggle Panel B");
qBtn.setShortcut(QKeySequence("Ctrl+B"));
qMainWin.setCentralWidget(&qBtn);
qMainWin.show();
// install signal handlers
QAction *pQCmd = qDockB.toggleViewAction();
QObject::connect(&qBtn, &QPushButton::clicked, pQCmd, &QAction::trigger);
QObject::connect(&qCmdShowDockB, &QAction::triggered, &qDockB, &QDockWidget::show);
QObject::connect(&qCmdHideDockB, &QAction::triggered, &qDockB, &QDockWidget::hide);
// runtime loop
return app.exec();
}
一个最小的项目文件testQDockWidgetShortCut.pro:
SOURCES = testQDockWidgetShortCut.cc
QT += widgets
在cygwin64上编译和测试:
$ qmake-qt5 testQDockWidgetShortCut.pro
$ make && ./testQDockWidgetShortCut
g++ -c -fno-keep-inline-dllexport -D_GNU_SOURCE -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -isystem /usr/include/qt5 -isystem /usr/include/qt5/QtWidgets -isystem /usr/include/qt5/QtGui -isystem /usr/include/qt5/QtCore -I. -I/usr/lib/qt5/mkspecs/cygwin-g++ -o testQDockWidgetShortCut.o testQDockWidgetShortCut.cc
g++ -o testQDockWidgetShortCut.exe testQDockWidgetShortCut.o -lQt5Widgets -lQt5Gui -lQt5Core -lGL -lpthread
Qt Version: 5.9.4
编译了一个在VS2017和Qt5.13.0中测试过的:
Qt Version: 5.13.0
(在这两种情况下,我测试了所有提供的快捷键:A、B、Ctrl+B ,以及单击按钮。)
我想知道 OP 声称
但经过一番研究,我没有找到任何相关的解决方案。
可能,使用“快捷方式”或“加速键”一词会更容易。否则,OP应该找到一些东西,例如
SO: How to set 3-key sequence shortcut with two key modifiers in Qt?
我认为可能是重复的。