基本用法
QAction *action = new QAction("&Open", this);
action->setShortcut(QKeySequence("Ctrl+O"));
创建一个名为 "Open" 的动作(QAction),并将其快捷键设置为 Ctrl+O
。当键盘按下 Ctrl+O
时,这个动作就会被触发。
例如,创建一个button,将其快捷键设置为F1,则按下F1就相当于点击了button(发出点击的信号)
QPushButton *button=new QPushButton;
button->setShortcut(QKeySequence("F1"));
我们可以设计一个槽函数,设置button被点击后要做的事,则在键盘上按下F1就会触发这个槽函数
setShortcut相当于一个事件过滤器,为控件设置一个(或一组)按键作为快捷键,则控件会识别相应按键的信号,并且不会把信号传递下去,即,为button设置了F1作为快捷键后,整个窗口就只有button能接收到F1被按下的信号,其它的任何控件或窗口(没有指定父窗口的弹窗除外)都接收不到F1被按下的信号(可以接收到释放信号)
如果想为一个动作设置多个快捷键,可以使用setShortcuts
button->setShortcuts(QList<QKeySequence>() << QKeySequence("Ctrl+B") << QKeySequence("F1"));
则按下F1或者Ctrl+B都可以触发button被点击的效果
如果想清除一个动作的快捷键,可以传一个空QKeySequence覆盖原有的快捷键
button->setShortcut(QKeySequence());
对于QKeySequence的参数,可以参照上面的例子自己设置按键,也可以使用Qt预定义的快捷键
button->setShortcut(QKeySequence::UnknownKey);
Qt预定义快捷键如下(复制自QKeySequence的定义)
enum StandardKey {
UnknownKey,
HelpContents,
WhatsThis,
Open,
Close,
Save,
New,
Delete,
Cut,
Copy,
Paste,
Undo,
Redo,
Back,
Forward,
Refresh,
ZoomIn,
ZoomOut,
Print,
AddTab,
NextChild,
PreviousChild,
Find,
FindNext,
FindPrevious,
Replace,
SelectAll,
Bold,
Italic,
Underline,
MoveToNextChar,
MoveToPreviousChar,
MoveToNextWord,
MoveToPreviousWord,
MoveToNextLine,
MoveToPreviousLine,
MoveToNextPage,
MoveToPreviousPage,
MoveToStartOfLine,
MoveToEndOfLine,
MoveToStartOfBlock,
MoveToEndOfBlock,
MoveToStartOfDocument,
MoveToEndOfDocument,
SelectNextChar,
SelectPreviousChar,
SelectNextWord,
SelectPreviousWord,
SelectNextLine,
SelectPreviousLine,
SelectNextPage,
SelectPreviousPage,
SelectStartOfLine,
SelectEndOfLine,
SelectStartOfBlock,
SelectEndOfBlock,
SelectStartOfDocument,
SelectEndOfDocument,
DeleteStartOfWord,
DeleteEndOfWord,
DeleteEndOfLine,
InsertParagraphSeparator,
InsertLineSeparator,
SaveAs,
Preferences,
Quit
};
这些快捷键对应于本地系统语言的相应快捷键,不同的系统快捷键可能不一样,使用的时候需要先查一下相应快捷键是什么