【发布时间】:2020-02-01 20:03:41
【问题描述】:
有谁知道为什么QKeyEvent::text() 输入 ` + a 返回一个 空字符串 和一个字母 a 而不是 one Linux 上的空 字符串和à?在 Windows 下,这似乎工作正常(在 Windows 和 Linux 下运行相同的应用程序)。
我正在通过 class 处理按下的键。
【问题讨论】:
有谁知道为什么QKeyEvent::text() 输入 ` + a 返回一个 空字符串 和一个字母 a 而不是 one Linux 上的空 字符串和à?在 Windows 下,这似乎工作正常(在 Windows 和 Linux 下运行相同的应用程序)。
我正在通过 class 处理按下的键。
【问题讨论】:
除了覆盖inputMethodEvent 方法之外,您还必须启用Qt::WA_InputMethodEnabled 属性:
#include <QtWidgets>
class Widget: public QWidget{
public:
Widget(QWidget *parent=nullptr): QWidget(parent){
setAttribute(Qt::WA_InputMethodEnabled, true);
}
protected:
void keyPressEvent(QKeyEvent *event){
qDebug() << "keyPressEvent" << event->text();
QWidget::keyPressEvent(event);
}
void inputMethodEvent(QInputMethodEvent *event){
qDebug() << "inputMethodEvent" << event->commitString();
QWidget::inputMethodEvent(event);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
【讨论】:
setFlag(QGraphicsItem::ItemAcceptsInputMethod, true); 看起来该方法现在给了我正确的文本。需要仔细检查。