QPlainTextEdit在QEvent::InputMethod里return true后,光标不见了
时间: 2024-03-20 09:41:33 浏览: 18
在QEvent::InputMethod事件中,如果你返回了true,表示你已经处理了这个事件,那么QPlainTextEdit不会再处理这个事件,也就不会更新光标的位置,导致光标不见了。解决方法是在处理完事件后,调用QPlainTextEdit::inputMethodQuery(Qt::ImCursorPosition)获取光标位置,然后调用QPlainTextEdit::setCursorPosition更新光标的位置。代码示例:
```cpp
bool MyPlainTextEdit::event(QEvent *event)
{
if (event->type() == QEvent::InputMethod) {
// 处理输入法事件
QInputMethodEvent *inputEvent = static_cast<QInputMethodEvent *>(event);
// 处理完事件后获取光标位置
int cursorPosition = inputMethodQuery(Qt::ImCursorPosition).toInt();
// 调用父类的event处理事件
bool result = QPlainTextEdit::event(event);
// 更新光标位置
setCursorPosition(cursorPosition);
return result;
}
// 其他事件调用父类的event处理
return QPlainTextEdit::event(event);
}
```