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

 

 

你可能感兴趣的:(QT)