Помогите разобраться. Суть задачи. Во время некоторых манипуляций юзера в QTextEdit вызывается QMessageBox с сообщением и делается setText, после которого курсор прыгает в начало текста, а надо, чтобы курсор оставался на месте.
Что я делаю. Завожу глобальную переменную в классе редактора:
Пишу слот:
void ClassName::OnCursorPositionChanged()
{
if( !ui->editText->textCursor().atStart() )
{
lastCursor = ui->editText->textCursor();
qDebug() << "*" << lastCursor.position();
}
}
Соединяю слот с сигналом едитора:
connect( ui->editText, SIGNAL(cursorPositionChanged()), this, SLOT(OnCursorPositionChanged()) );
Т.о. мы имеем последнее положение курсора, но если курсор прыгнул в ноль, то мы храним предпоследнее - то, которое нам и нужно.
Далее в функции, где выводится QMessageBox и делается setText:
ui->editText->setTextCursor(lastCursor);
qDebug() << "@" << lastCursor.position();
И вот какой вывод я получаю, пощелкав по QTextEdit несколько раз, а потом вызвав мессадж и setText с кодом выше:
* 1053
* 3174
* 1404
* 1229
* 5309
* 5310
@ 7168
* 7168
Последнее положение курсора отрабатывает норм, но после активации кода с setText, почему-то вдруг lastCursor оказывается вконце текста. Теперь курсор прыгает не в начало, а в конец.
Как такое может быть? lastCursor в 2 местах только присутствует: в одном справа от оператора присваивания, в другом - слева. Все.