对不起,如果这是一个新手问题。我有一些用于在编辑器中标记错误的代码,但当错误消失时,我找不到如何清除标记。这是我为呈现错误而调用的方法。
void Editor::highlightErrors( Thing* t )
{
if ( !t )
return;
const std::vector<Thing::Error>& errors = t->errors();
QTextCursor tc = textCursor();
tc.select(QTextCursor::Document);
QList<QTextEdit::ExtraSelection> extraSelections;
for(int i = 0; i < errors.size(); ++i) {
const Thing::Error& error = errors[i];
QTextEdit::ExtraSelection sel;
sel.format = this->errorFormat();
sel.format.setToolTip(QString(error.error.c_str()));
sel.cursor = tc;
sel.cursor.clearSelection();
sel.cursor.setPosition(error.startPos);
sel.cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor, error.endPos - error.startPos);
sel.cursor.mergeCharFormat(sel.format);
extraSelections.append(sel);
}
setExtraSelections(extraSelections);
}
我希望 QPlainTextEdit 在没有错误的情况下调用此方法时重新绘制没有错误格式的文本,但事实并非如此。QTextLayout::draw 被正确调用,额外的选择也被清除,但文本仍在以错误格式绘制。
谢谢您的帮助。