QKeyEvent::text() 在 Linux 上不 return 重音字母
QKeyEvent::text() doesn't return accent letter on Linux
有谁知道为什么 QKeyEvent::text()
用于输入 ` + a returns 一个 空字符串 和一个字母a 而不是 一个空 字符串和 Linux 上的 à?在 Windows 下这似乎工作正常(在 Windows 和 Linux 下相同的应用程序 运行)。
我正在通过这个 class 处理按键。
除了覆盖 inputMethodEvent
方法外,您还必须启用 Qt::WA_InputMethodEnabled
属性:
#include <QtWidgets>
class Widget: public QWidget{
public:
Widget(QWidget *parent=nullptr): QWidget(parent){
<b>setAttribute(Qt::WA_InputMethodEnabled, true);</b>
}
protected:
void keyPressEvent(QKeyEvent *event){
qDebug() << "keyPressEvent" << event->text();
QWidget::keyPressEvent(event);
}
<b>void inputMethodEvent(QInputMethodEvent *event){
qDebug() << "inputMethodEvent" << event->commitString();
QWidget::inputMethodEvent(event);
}</b>
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
有谁知道为什么 QKeyEvent::text()
用于输入 ` + a returns 一个 空字符串 和一个字母a 而不是 一个空 字符串和 Linux 上的 à?在 Windows 下这似乎工作正常(在 Windows 和 Linux 下相同的应用程序 运行)。
我正在通过这个 class 处理按键。
除了覆盖 inputMethodEvent
方法外,您还必须启用 Qt::WA_InputMethodEnabled
属性:
#include <QtWidgets>
class Widget: public QWidget{
public:
Widget(QWidget *parent=nullptr): QWidget(parent){
<b>setAttribute(Qt::WA_InputMethodEnabled, true);</b>
}
protected:
void keyPressEvent(QKeyEvent *event){
qDebug() << "keyPressEvent" << event->text();
QWidget::keyPressEvent(event);
}
<b>void inputMethodEvent(QInputMethodEvent *event){
qDebug() << "inputMethodEvent" << event->commitString();
QWidget::inputMethodEvent(event);
}</b>
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}