1、必须设置widget可以拥有焦点(注意:默认的focusPolicy是NoFocus,这会导致无法捕获Ctrl/Alt/Shfit...之外的字符按键)。
setFocusPolicy( Qt::StrongFocus ); // 窗口将通过鼠标点击、按tab键等方式获取焦点
2、重写keyPressEvent/keyReleaseEvent虚函数(如果必要也可重写eventFilter自定义筛选)。
如果是传统快捷键如:Ctrl+C/Ctrl+V/Ctrl+S/Ctrl+Shifit+S/Ctrl+Z/....可以使用QKeySequence 中StandardKey预定义的。例如:
void QMyDerivedMainWindow::keyPressEvent( QKeyEvent* event)
{
if( event ->matches( QKeySequence::Copy ) )
{
// 进行复制操作:内容->剪贴板
// 注意:如果不希望其它地方继续处理此热键,不要使用event ->accept(),
// 因为按键事件触发的前提是event ->accept() == true,
// 正确的方式是不调用基类的keyPressEvent;
}
QMainWindow::keyPressEvent( event );
}
这种处理等价于自己判断ctrl+c按键:
void QMyDerivedMainWindow::keyPressEvent(QKeyEvent* event)
{
// 判断是否同时按下ctrl和c键
if( (event ->modifiers()& Qt::ControlModifier) != 0 && event ->key() == Qt::Key_C )
{
// 进行复制操作:内容->剪贴板
// 注意:如果不希望其它地方继续处理此热键,不要使用event ->accept(),
// 因为按键事件触发的前提是event ->accept() == true,
// 正确的方式是不调用基类的keyPressEvent;
}
QMainWindow::keyPressEvent( event );
}
参考资料:Qt Assistant
---------------------
作者:漂_泊
来源:CSDN
原文:https://blog.csdn.net/imatt/article/details/105913610
版权声明:本文为作者原创文章,转载请附上博文链接!