fix: DTExtEdit cursorRectangle 偏移

由于DTextEdit需要绘制圆角setViewportMargins,导致光标位置异常。此处在QInputMethodQueryEvent时同步一下

Bug: https://pms.uniontech.com/zentao/bug-view-79676.html
Log: 修复DTextEdit光标点偏移的问题
Change-Id: If8c0c9d4aef4746ad0e6b7eb3134881cccb09699
(cherry picked from commit 2a4337645b)
This commit is contained in:
ck 2021-05-17 15:08:51 +08:00 committed by chenke
parent 26f1e02c35
commit f0944b7658
1 changed files with 16 additions and 0 deletions

View File

@ -89,6 +89,22 @@ bool DTextEdit::event(QEvent *e)
d->widgetButtom->setFixedHeight(frame_radius);
d->widgetLeft->setFixedWidth(frame_radius);
d->widgetRight->setFixedWidth(frame_radius);
} else if (e->type() == QEvent::InputMethodQuery && testAttribute(Qt::WA_InputMethodEnabled)) {
QInputMethodQueryEvent *query = static_cast<QInputMethodQueryEvent *>(e);
Qt::InputMethodQueries queries = query->queries();
for (uint i = 0; i < 32; ++i) {
Qt::InputMethodQuery property = (Qt::InputMethodQuery(int(queries & (1<<i))));
if (property == Qt::ImCursorRectangle) {
QRect rc = cursorRect();
DStyleHelper dstyle(style());
int frame_radius = dstyle.pixelMetric(DStyle::PM_FrameRadius, nullptr, this);
// FIX bug-79676 setViewportMargins 会导致光标位置异常,此处调整回来吧
rc.adjust(frame_radius, 0, frame_radius, 0);
query->setValue(property, rc);
query->accept();
return true;
}
}
}
return QTextEdit::event(e);