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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: сохранение позиции slider'a в QTextEdit  (Прочитано 5101 раз)
maybell
Гость
« : Июль 21, 2008, 21:06 »

 Имеется html-отчет о заданиях пользователя. Выглядит как табличка с описанием и статусами (Выполнил, Ознакомлен и тп).
Отчет постоянно обновляется (появляются новые задания, выполненные проверяются) и при каждом обновлении страница с отчетом прыгает наверх, т.е. пользователь теряет задание на котором находится. В общем необходимо зафиксировать каким-то образом позицию в отчете..
Была попытка через anchor сохранить текущую позицию, но опять же пользователь может не кликать  на задании, а просто проскроллить текст..
Вопрос: Каким образом возможно сохранить текущую позицию бегунка скроллера?
У класса QTextEdit нет наследуемых классов от QSlider, есть только QScrollArea.
Были попытки типа:
QSlider slider=new QSlider(text);//пробовался и frame
slider_position=slider->SliderPosition;
slider->setSliderPosition(slider_position);
slider->setValue(slider_position);

К сожалению, кода под рукой нет, но хотелось бы услышать какие-нибудь предложения, доводы и замечания..
Qt 4.1.2
« Последнее редактирование: Июль 21, 2008, 21:12 от maybell » Записан
spirit
Гость
« Ответ #1 : Июль 21, 2008, 21:13 »

Код:
QScrollBar * QTextEdit::verticalScrollBar () const

а QScrollBar наследуется от QAbstractSlider.
ну а дальше ассистант.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #2 : Июль 21, 2008, 21:16 »

Вопрос: Каким образом возможно сохранить текущую позицию бегунка скроллера?

Узнать позицию можно например так:

Код:
int hor_pos = textedit->horizontalScrollBar()->value();
int ver_pos = textedit->verticalScrollBar()->value();
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
axinedy
Гость
« Ответ #3 : Июль 13, 2010, 13:06 »

Цитировать
и при каждом обновлении страница с отчетом прыгает наверх, т.е. пользователь теряет задание на котором находится. В общем необходимо зафиксировать каким-то образом позицию в отчете..
Столкнулся с аналогичной проблемой...

использование такого подхода:
Код:
//перед обновлением:
ver_pos = textedit->verticalScrollBar()->value();
...
//а после обновления:
textedit->verticalScrollBar()->setValue(ver_pos);
Приводит к тому, что позиция возвращается лишь примерно (текст прыгает около того места, где надо), т.к. у textedit стоит опция переноса слов (и максимальное значение скроллбара может меняться), если сделать
Код:
textedit->setWordWrapMode(QTextOption::NoWrap);
то позиция железно сохраняется где надо (т.к. количество строк одинаковое, хотя они могут быть разной длины), но появляется ненужная прокрутка по горизонтали...
Попытка сохранять и восстанавливать позицию следующим образом:
Код:
//перед обновлением текста
textedit->setWordWrapMode(QTextOption::NoWrap);
textedit->update();
ver_pos = textedit->verticalScrollBar()->value();
textedit->setWordWrapMode(QTextOption::WordWrap);
...
//после замены текста
textedit->setWordWrapMode(QTextOption::NoWrap);
textedit->update();
textedit->verticalScrollBar()->setValue(ver_pos);
textedit->setWordWrapMode(QTextOption::WordWrap);
почему-то не даёт результата - позиция опять скачет около нужного места...
Если заменить  textedit->update() на  textedit->repaint() видно, что обновление происходит - горизонтальная прокрутка появляется и тут же исчезает, но позиция "скачет"...

Что можно сделать?
« Последнее редактирование: Июль 13, 2010, 13:10 от axinedy » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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