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:
parent
26f1e02c35
commit
f0944b7658
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue