gpt4 book ai didi

qt - 如何根据当前键盘布局从 QKeyEvent 捕获 QKeySequence?

转载 作者:行者123 更新时间:2023-12-03 20:40:40 32 4
gpt4 key购买 nike

我需要这样做来配置我的应用程序。
我有重新实现的 keyPressEvent 方法的 QLineEdit 字段。

QKeyEvent *ke = ...
QString txt;

if(ke->modifiers() & Qt::ControlModifier)
txt += "Ctrl+";
if(ke->modifiers() & Qt::AltModifier)
txt += "Alt+";
if(ke->modifiers() & Qt::ShiftModifier)
txt += "Shift+";

if(ke->key() >= Qt::Key_0 && ke->key() <= Qt::Key_9)
txt += ('0' + ke->key() - Qt::Key_0);
else if(ke->key() >= Qt::Key_A && ke->key() <= Qt::Key_Z)
txt += ('A' + ke->key() - Qt::Key_A);
ui->hotkeyEdit->setText(txt);

但是此解决方案只能使用英文字符创建快捷方式。例如,当我使用俄语键盘布局时,此代码将显示相同的序列,但使用英文字符,放置在相同的键盘键上。

最佳答案

您可能会发现非常有用的是函数 QKeySequence().toString() .

以下是我用来捕获用户定义的快捷方式的代码的一部分。通过一些修改,它可以在您的项目中执行您需要的任何操作。希望它有所帮助(抱歉我的身份很差):

if (event->type() == QEvent::KeyPress){ 
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);

int keyInt = keyEvent->key();
Qt::Key key = static_cast<Qt::Key>(keyInt);
if(key == Qt::Key_unknown){
qDebug() << "Unknown key from a macro probably";
return;
}
// the user have clicked just and only the special keys Ctrl, Shift, Alt, Meta.
if(key == Qt::Key_Control ||
key == Qt::Key_Shift ||
key == Qt::Key_Alt ||
key == Qt::Key_Meta)
{
qDebug() << "Single click of special key: Ctrl, Shift, Alt or Meta";
qDebug() << "New KeySequence:" << QKeySequence(keyInt).toString(QKeySequence::NativeText);
return;
}

// check for a combination of user clicks
Qt::KeyboardModifiers modifiers = keyEvent->modifiers();
QString keyText = keyEvent->text();
// if the keyText is empty than it's a special key like F1, F5, ...
qDebug() << "Pressed Key:" << keyText;

QList<Qt::Key> modifiersList;
if(modifiers & Qt::ShiftModifier)
keyInt += Qt::SHIFT;
if(modifiers & Qt::ControlModifier)
keyInt += Qt::CTRL;
if(modifiers & Qt::AltModifier)
keyInt += Qt::ALT;
if(modifiers & Qt::MetaModifier)
keyInt += Qt::META;

qDebug() << "New KeySequence:" << QKeySequence(keyInt).toString(QKeySequence::NativeText);
}

关于qt - 如何根据当前键盘布局从 QKeyEvent 捕获 QKeySequence?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6647970/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com