【问题标题】:QKeyEvent::text() doesn't return accent letter on LinuxQKeyEvent::text() 在 Linux 上不返回重音字母
【发布时间】:2020-02-01 20:03:41
【问题描述】:

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

我正在通过 class 处理按下的键。

【问题讨论】:

    标签: linux qt qkeyevent


    【解决方案1】:

    除了覆盖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();
    }

    【讨论】:

    • 感谢您的反馈。不幸的是,我没有使用小部件进行文本输入,而是使用从 QGraphicsItem 继承的类。设置 Qt::WA_InputMethodEnabled 会给出一个控制台条目,说不支持属性。我已经覆盖了你提到的方法,但它没有被调用。
    • 我想我明白了,应该是setFlag(QGraphicsItem::ItemAcceptsInputMethod, true); 看起来该方法现在给了我正确的文本。需要仔细检查。
    • 是的,正在工作。对普通拉丁字母触发​​keyPressEvent,当出现复合字母时触发InputMethod。感谢您的帮助。
    • 哦,这也修复了中文字符输入,在我的情况下以前不起作用,现在似乎起作用了。
    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    • 2014-03-13
    • 2013-07-30
    • 1970-01-01
    • 2014-11-13
    相关资源
    最近更新 更多