Название: QTextEdit и QTextCursor - не понятное поведение Отправлено: Rododendron от Январь 23, 2018, 09:31 Помогите разобраться. Суть задачи. Во время некоторых манипуляций юзера в QTextEdit вызывается QMessageBox с сообщением и делается setText, после которого курсор прыгает в начало текста, а надо, чтобы курсор оставался на месте.
Что я делаю. Завожу глобальную переменную в классе редактора: Код: QTextCursor lastCursor; Пишу слот: Код: void ClassName::OnCursorPositionChanged() Соединяю слот с сигналом едитора: Код: connect( ui->editText, SIGNAL(cursorPositionChanged()), this, SLOT(OnCursorPositionChanged()) ); Т.о. мы имеем последнее положение курсора, но если курсор прыгнул в ноль, то мы храним предпоследнее - то, которое нам и нужно. Далее в функции, где выводится QMessageBox и делается setText: Код: ui->editText->setTextCursor(lastCursor); И вот какой вывод я получаю, пощелкав по QTextEdit несколько раз, а потом вызвав мессадж и setText с кодом выше: Код: * 1053 Как такое может быть? 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
|