C++ 获取原始关键点,就像没有shift修改器一样

C++ 获取原始关键点,就像没有shift修改器一样,c++,qt,C++,Qt,我想创建键盘绑定,它至少可以在不同的键盘布局上工作。我的问题是,shift修饰符将键转换为不同的键,如文档中所述: 不管键盘布局如何,是否有办法找到原始键? 例如,当按下shift+。时,发现按下了 另请参见此(当前未回答的)问题:在Windows中,您可以使用和将VK_VK_映射到_CHAR来获取未移位的密钥MapVirtualKeyA需要虚拟密钥,可以使用该密钥获取 注意:当仅按modifiersQKeyEvent::key()时可能会报告错误字符,虚拟键有助于区分这些情况 例子 void主

我想创建键盘绑定,它至少可以在不同的键盘布局上工作。我的问题是,
shift
修饰符将键转换为不同的键,如文档中所述:

不管键盘布局如何,是否有办法找到原始键? 例如,当按下
shift+。
时,发现按下了

另请参见此(当前未回答的)问题:

在Windows中,您可以使用和
将VK_VK_映射到_CHAR
来获取未移位的密钥
MapVirtualKeyA
需要虚拟密钥,可以使用该密钥获取

注意:当仅按modifiers
QKeyEvent::key()
时可能会报告错误字符,虚拟键有助于区分这些情况

例子
void主窗口::按键事件(QKeyEvent*ke)
{
const auto vk=ke->nativeVirtualKey();
const auto unshifted_key=MapVirtualKeyA(vk,MAPVK_vk_TO_CHAR);
qDebug()修饰符()&Qt::ControlModifier)修饰符+=“Ctrl+”;
如果(ke->modifiers()&Qt::AltModifier)修饰符+=“Alt+”;
如果(ke->modifiers()&Qt::MetaModifier)修饰符+=“Meta+”;
常量QKeySequence ks(修饰符+QChar(ke->key());
qDebug()
void MainWindow::keyPressEvent(QKeyEvent* ke)
{
  const auto vk = ke->nativeVirtualKey();
  const auto unshifted_key = MapVirtualKeyA(vk, MAPVK_VK_TO_CHAR);

  qDebug() << "Original key:" << (char)ke->key();
  qDebug() << "Unshifted key:" << (char)unshifted_key;

  if (unshifted_key > 0) { 
    // Printing the full key sequence just for comparison purposes
    QString modifier;
    if (ke->modifiers() & Qt::ShiftModifier) modifier += "Shift+";
    if (ke->modifiers() & Qt::ControlModifier) modifier += "Ctrl+";
    if (ke->modifiers() & Qt::AltModifier) modifier += "Alt+";
    if (ke->modifiers() & Qt::MetaModifier) modifier += "Meta+";
    const QKeySequence ks(modifier + QChar(ke->key()));
    qDebug() << "Full key sequence:" << ks.toString();
  }
}