提问人:dde 提问时间:1/9/2023 最后编辑:dde 更新时间:1/10/2023 访问量:39
在 dropEvent 之后在 QTextEdit 中重新建立游标的预期行为
Reestablishing expected behavior of cursor in QTextEdit following a dropEvent
问:
我编写了一个类 CustomTextEdit,它继承自 qTextEdit 并覆盖以下两种方法:
bool canInsertFromMimeData(const QMimeData *source) const override;
void dropEvent(QDropEvent *e) override;
这样就可以将小组件用作拖放操作的目标。
这会对此小组件中的文本光标的行为产生意想不到的后果。
在 任何 之前,可以直观地看到文本光标的放置位置。
文本光标位置移动到鼠标单击的最后一个位置。
这是游标的预期行为。dropEvent
执行 之后,文本光标的垂直条呈现
保持在插入文本之后的位置。文本光标不再移动到该位置
在该区域的最后一次点击。dropEvent
QTextEdit
如果执行其他 s,最终可能会显示多个垂直条。dropEvent
在以下时间后重新建立文本光标的默认行为的正确过程是什么
执行 ?dropEvent
甚至该方法的以下定义也会产生这种奇怪的行为:dropEvent
void CustomTextEdit::dropEvent(QDropEvent *e)
{
this->insertPlainText(QString("<<dropped text>>"));
}
答:
1赞
dde
1/10/2023
#1
解决方案是在插入文本之前显式设置文本光标,并在父类上调用该方法。dropEvent
QTextEdit
void CustomTextEdit::dropEvent(QDropEvent *e)
{
// setting the text cursor
QTextCursor cursor = this->textCursor();
cursor.setPosition(cursorForPosition(e->pos()).position());
this->setTextCursor(cursor);
// dropping the text
this->insertPlainText(QString("<<dropped text>>"));
// conclude the call by calling the parent method
QTextEdit::dropEvent(e);
}
评论
update()