要将按键绑定到操作,Q快捷键 https://doc.qt.io/qt-5/qshortcut.html#details负责。
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);
当用户键入给定快捷方式的按键序列时,会发出快捷方式的 activate() 信号。 (在不明确的情况下,将发出activatedAmbigously() 信号。)当快捷方式的父窗口小部件正在接收事件时,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 http://www.cygwin.org:
$ 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
(In both cases, I tested all offered shortcut keys: A, B, Ctrl+B, as well as clicking the button.)
我想知道OP声称
但经过一番研究,我没有找到任何相关的解决方案。
也许,使用术语“快捷键”或“加速键”会更容易。否则,OP应该发现一些东西,例如
SO:如何在 Qt 中使用两个键修饰符设置 3 键序列快捷键? https://stackoverflow.com/a/42877119/7478597
我认为这可能是重复的。