具体原因暂时没有找到
解决办法
- 提升控件并重写下边的事件函数
构造函数
this->setAttribute(Qt::WA_InputMethodEnabled, true);
this->setAttribute(Qt::WA_KeyCompression, true);
this->setFocusPolicy(Qt::WheelFocus);
在LineEdit中重写事件函数
重写事件
QVariant inputMethodQuery(Qt::InputMethodQuery) const override;
void inputMethodEvent(QInputMethodEvent *) override;
void inputMethodEvent(QInputMethodEvent *) override;
/*当切换成中文输入法时候会进入这个函数*/
void inputMethodEvent(QInputMethodEvent *)
{
/*继承自QLineEdit类函数,commitString()是输入提交的信息,控件之前的值丢失加的*/
setText(this->text() + e->commitString());
}
/*暂时不太清楚这个有没有起作用,就这样子写了,不清楚原理,所以先将解决办法记录一下*/
QVariant TypeWidget::inputMethodQuery(Qt::InputMethodQuery query) const
{
switch (query) {
default:
return QWidget::inputMethodQuery (query);
}
}
- 如果控件在qwidget中,最好也重写一下上边的事件,我重写了事件,实际上并没有做什么有用的操作,反正就是好了,我也不太清楚。
回头找原因。 - 禁止输入中文的设置方法
this->setAttribute(Qt::WA_InputMethodEnabled, false);