Russian Qt Forum
Ноябрь 23, 2024, 01:03 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTextEdit и QTextCursor - не понятное поведение  (Прочитано 3116 раз)
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 местах только присутствует: в одном справа от оператора присваивания, в другом - слева. Все.
Записан
Rododendron
Гость
« Ответ #1 : Январь 24, 2018, 08:40 »

В общем, свою проблему я решил, заменив setText на undo.. т.к. мне нужно было всего лишь отменить кое-какое редактирование пользователя.
Но почему объект QTextCursor, который является копией QTextEdit::textCursor(), изменяется после вызова функции QTextEdit::setText() - для меня осталось загадкой.
Записан
Dimka Novikov
Гость
« Ответ #2 : Январь 24, 2018, 10:56 »

Привет. По всей видимости дело вот в этом http://doc.qt.io/qt-5/implicit-sharing.html
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.137 секунд. Запросов: 21.