我正在Qt中处理文本编辑器项目,并且已将以下方法重写添加到类型为QPlainTextEdit
的类中:
/* Custom handler for events. Used to handle the case of Enter being pressed after an opening brace.
*/
bool Editor::eventFilter(QObject* obj, QEvent* event)
{
bool isKeyPress = event->type() == QEvent::KeyPress;
if(isKeyPress)
{
QKeyEvent *key = static_cast<QKeyEvent*>(event);
if(key->key() == Qt::Key_Enter || key->key() == Qt::Key_Return)
{
QString documentContents = document()->toPlainText();
if(documentContents.length() >= 1)
{
int indexToLeftOfCursor = textCursor().position() - 1;
if(indexToLeftOfCursor >= 0 && indexToLeftOfCursor < documentContents.length())
{
bool hitEnterAfterOpeningBrace = documentContents.at(indexToLeftOfCursor) == '{';
if(hitEnterAfterOpeningBrace)
{
// TODO determine indentation level of the opening brace
insertPlainText("\n\t\n}");
QTextCursor cursor = textCursor();
cursor.setPosition(cursor.position() - 3);
setTextCursor(cursor);
}
}
}
}
else
{
return QObject::eventFilter(obj, event);
}
}
else
{
return QObject::eventFilter(obj, event);
}
return false;
}
没有用于设置文本光标位置的代码,结果如下:
光标结束于第4行,第2行有一个选项卡。我的意图是移动光标,使其位于选项卡的右侧,因此我尝试使用编写的代码来实现。但这给了我这个:
在这里,缩进仍然在第2行上,但是现在制表符和右括号之间有一条额外的线,这有点奇怪。
更奇怪的是,无论我进入哪个新职位,这种情况都会发生。例如,出于好奇,我尝试做cursor.position() - 2
和cursor.position() - 1
,但结果还是一样。
在这里我对插入文本和移动光标有什么误解?