[转]Qt的KeyEvent捕获Ctrl+C等快捷键/热键

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
版权声明:本文为作者原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值