侧边栏壁纸
博主头像
三味的小站 博主等级

世界上没有偶然,有的只是必然的结果。

  • 累计撰写 63 篇文章
  • 累计创建 14 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录
Qt

Qt中拼音输入无候选框问题

三味线
2024-11-13 / 0 评论 / 0 点赞 / 29 阅读 / 0 字

输入法:Win10旧版输入法

问题:一个QTextEdit控件,输入时只显示了输入的字母,文字候选框未显示。

可能原因:此控件通过textChange关联了一个较为复杂的槽函数,比较耗时,且每输入一个字母就会触发textChange;旧版输入法存在某些问题,导致显示异常。(新版已无此问题)

解决办法:另外定义一个信号,检测输入事件,判断是否存在预输入字符,无预输入字符时触发自定义信号;

#include <QEvent>

signals:
    void selfTextChanged();
protected:
    bool eventFilter(QObject *obj, QEvent *event) override;
private:
    bool isPreedit = false;
installEventFilter(this);
connect(this, &QTextEdit::textChanged, this, [this](){
    if (!isPreedit) {
        emit selfTextChanged();
    }
});
bool MyEdit::eventFilter(QObject *obj, QEvent *event)
{
    isPreedit = false;
    if (obj == this && event->type() == QEvent::InputMethod) {
        QInputMethodEvent *inputMethodEvent = static_cast<QInputMethodEvent*>(event);
        if (!inputMethodEvent->preeditString().isEmpty()) {
            // 拼音输入候选状态时,不触发textChange
            isPreedit = true;
        }
    }
    return QTextEdit::eventFilter(obj, event);
}

备注:在新版Win10中,可点击右下输入法->语言首选项->中文->选项->微软拼音->选项->常规->兼容性,勾选后,此问题可复现。

0

评论区