首页 > 解决方案 > QKeyEvent::text() 在 Linux 上不返回重音字母

问题描述

有谁知道为什么在 Linux 上QKeyEvent::text()键入` + a返回一个空字符串和一个字母a而不是一个空字符串和à ?在 Windows 下,这似乎工作正常(在 Windows 和 Linux 下运行相同的应用程序)。

我正在通过此类处理按下的

标签: linuxqtqkeyevent

解决方案


Qt::WA_InputMethodEnabled除了覆盖方法之外,您还必须启用该属性inputMethodEvent

#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();
}

推荐阅读