QKeyEvent :: text () не возвращает букву ударения на Linux - PullRequest
1 голос
/ 01 февраля 2020

Кто-нибудь знает, почему QKeyEvent::text() для ввода `+ a возвращает одну пустую строку и одну букву a вместо одну пустую строка и а на Linux? Под Windows это, кажется, работает нормально (то же самое приложение работает под Windows и Linux).

Я обрабатываю нажатые клавиши через этот класс .

1 Ответ

1 голос
/ 01 февраля 2020

Вы должны включить атрибут Qt::WA_InputMethodEnabled в дополнение к переопределению метода inputMethodEvent:

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