Qt Shift快捷键,QT组合按键的一个bug

在Qt 常常会使用到组合按键作为快捷键,而快捷键往往有一下的写法:

void QMainWindow::keyReleaseEvent(QKeyEvent *event)
{
    int uKey = event->key();

	Qt::KeyboardModifiers modifiers = event->modifiers();
	//判断某个修饰键是否被按下

	if (modifiers == Qt::NoModifier)
	{
        // 判断ukey是哪个键
	}
	else if (modifiers == Qt::ControlModifier)
	{
        // 判断ukey是哪个键
	}
	else if (modifiers == Qt::ShiftModifier)
	{
        // 判断ukey是哪个键
	}
    else if(modifiers =( Qt::ShiftModifier | Qt::ControlModifier))
    {
    }
    ....  // 这里省略无数代码
}

然后,自信满满的提交代码,结果有部分按键死活都不触发!!!,有些按钮能触发,却在小键盘上无法触发

// Qt 并没有把windows底层的按键处理

// 需要注意 

1、

if(modifiers == Qt::ShiftModifier)  //时候,部分键位有其他意义,例如
{
    if(nkey == Qt::Key_1 || nkey == Qt::Key_3)
    {
        // 这种写法是错误的 shift + 1 = !  ->>>  Qt::Key_Exclam
       //  shif + 3 = #   ->>> Qt::Key_NumberSign
    }
}

其次上面的错误还有:字母上面的数字键,和小键盘的数字键在shift模式下,表示不同的键

2、

if (modifiers == Qt::NoModifier)  // 需要注意的是,shift+小键盘会进这里
{
    // 这里需要判断小键盘的情况
    if(nKey == Qt::Key_End)  // 这里有两种触发形式直接按end键、或者shift+小键盘1--小键盘也可能不响应
    {
        
    }
}

3、


    if (modifiers == Qt::ControlModifier) // 这么写也不一定对,ctrl+A 和ctrl+方向键是不一致的
    {
        // 判断ukey是哪个键
    }

    // 应该写成
    if(modifiers == Qt::ControlModifier || modifiers & Qt::ControlModifier)
    {
        // 再判断按键
    }

// 注意,需要优先处理多个按键情况类似 Qt::ControlModifier  + Qt::ShiftModifier + Qt::AltModifier

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值