Russian Qt Forum

Qt => Общие вопросы => Тема начата: Rododendron от Январь 23, 2018, 09:31



Название: QTextEdit и QTextCursor - не понятное поведение
Отправлено: Rododendron от Январь 23, 2018, 09:31
Помогите разобраться. Суть задачи. Во время некоторых манипуляций юзера в QTextEdit вызывается QMessageBox с сообщением и делается setText, после которого курсор прыгает в начало текста, а надо, чтобы курсор оставался на месте.
Что я делаю. Завожу глобальную переменную в классе редактора:
Код:
QTextCursor lastCursor;

Пишу слот:
Код:
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 местах только присутствует: в одном справа от оператора присваивания, в другом - слева. Все.


Название: Re: QTextEdit и QTextCursor - не понятное поведение
Отправлено: Rododendron от Январь 24, 2018, 08:40
В общем, свою проблему я решил, заменив setText на undo.. т.к. мне нужно было всего лишь отменить кое-какое редактирование пользователя.
Но почему объект QTextCursor, который является копией QTextEdit::textCursor(), изменяется после вызова функции QTextEdit::setText() - для меня осталось загадкой.


Название: Re: QTextEdit и QTextCursor - не понятное поведение
Отправлено: Dimka Novikov от Январь 24, 2018, 10:56
Привет. По всей видимости дело вот в этом http://doc.qt.io/qt-5/implicit-sharing.html