我想创建键盘绑定(bind),它至少在不同的键盘布局上工作相似。我的问题是 shift
修饰符将键转换为不同的键,如文档中所述:http://doc.qt.io/qt-5/qkeysequence.html#keyboard-layout-issues
有没有办法在不考虑键盘布局的情况下找出原始键?
例如。发现 .
在按下 shift+.
的同时被按下。
另请参阅此(目前未答复)问题:get shift+numerical keys in qt using qkeyevent
最佳答案
在 Windows 中,您可以使用 MapVirtualKeyA
和 MAPVK_VK_TO_CHAR
获取未移位的 key 。 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();
}
}
示例的完整源代码可以在 here 中找到.
关于c++ - 像没有 shift 修改器一样获取原始 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42632373/