Qt QKeySequenceEdit 如何单独监听SHIFT等系统按键?

我已经重载了QKeySequenceEdit类,并且重写了keyPressEvent函数进行只接收一组按键,记得默认是能接收四组。

但目前还有一个问题,我这边允许设置SHIFT、CTRL、ALT等单独的系统按键,发现默认这个控件按下SHIFT后还在等待接收,一旦结束会认为是一种取消的情况。

请问如何对这种单独的键进行设置?

当前尝试了如下接收SHIFT的情况并设置,但发现设置也是无效:

if(pEvent) {
	if(pEvent->key() == 16777248) {
		QKeySequence seq(QKeySequence::fromString("SHIFT"));
		setKeySequence(seq);
	}
}

 

已经解决了,还是放弃继承QKeySequenceEdit了,改用继承QLineEdit并对keyPressEvent进行修改,直接根据自己需求进行修改了。
大致修改如下,还在根据情况进行修改:

void ShortcutKeyEdit::keyPressEvent(QKeyEvent *e)
{
    int uKey = e->key();
    Qt::Key key = static_cast<Qt::Key>(uKey);
    if (key == Qt::Key_unknown) {
        return;
    }

    // 部分单独的系统按键直接返回
    if(key == Qt::Key_CapsLock
    || key == Qt::Key_Escape) {
        return ;
    }

    // 判断是否为单个组合键
    if (key == Qt::Key_Control
        || key == Qt::Key_Shift
        || key == Qt::Key_Alt
        || key == Qt::Key_Enter
        || key == Qt::Key_Return
        || key == Qt::Key_Tab
        || key == Qt::Key_Space)
    {
        switch(key) {
        case Qt::Key_Control:
            setText("CTRL");
            break;
        case Qt::Key_Shift:
            setText("SHIFT");
            break;
        case Qt::Key_Alt:
            setText("ALT");
            break;
        case Qt::Key_Enter:
            setText("ENTER");
            break;
        case Qt::Key_Return:
            setText("RETURN");
            break;
        case Qt::Key_Tab:
            setText("TAB");
            break;
        case Qt::Key_Space:
            setText("SPACE");
            break;
        default:
            break;
        }
        m_key = key;
        return ;
    }


    // 确定是否为组合键
    bool bModifiers = false;
    Qt::KeyboardModifiers modifiers = e->modifiers();
    if (modifiers & Qt::ShiftModifier) {
        uKey += Qt::SHIFT;
        bModifiers = true;
        return;
    }
    else if (modifiers & Qt::ControlModifier) {
        uKey += Qt::CTRL;
        bModifiers = true;
    }
    else if (modifiers & Qt::AltModifier) {
        uKey += Qt::ALT;
        bModifiers = true;
    }


    // 处理单个数字、字母的情况
    bool bNum = (e->key() >= Qt::Key_0 && e->key() <= Qt::Key_9);
    bool bChar = (e->key() >= Qt::Key_A && e->key() <= Qt::Key_Z);
    if ((bNum || bChar) && !bModifiers) {
        QString strKey = QKeySequence(uKey).toString();
        strKey = strKey.toLower();
        setText(strKey);
        m_key = key;
        return ;
    }

    // 其他按键的情况
    setText(QKeySequence(uKey).toString());
    m_key = key;
}