我想创建键盘绑定,至少在不同的键盘布局上工作类似。我的问题是shift修饰符将键转换为不同的键,如文档中所述:http : //doc.qt.io/qt-5/qkeysequence.html#keyboard-layout-issues
无论键盘布局如何,有没有办法找出原始键?
例如,.当shift+.被按下时找出被按下。
另请参阅此(当前未回答)问题:使用 qkeyevent 在 qt 中获取 shift+numeric keys
在 Windows 中,您可以使用MapVirtualKeyA和MAPVK_VK_TO_CHAR来获取未移位的密钥。MapVirtualKeyA需要虚拟钥匙,可以使用QKeyEvent::nativeVirtualKey。
注意:当仅按修饰符时QKeyEvent::key()可能会报告错误字符,虚拟键有助于区分这些情况。
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();
}
}
Run Code Online (Sandbox Code Playgroud)