输入法: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中,可点击右下输入法->语言首选项->中文->选项->微软拼音->选项->常规->兼容性,勾选后,此问题可复现。
评论区