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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QPlainTextEdit, организовать скролинг  (Прочитано 4438 раз)
Exception13
Гость
« : Октябрь 02, 2009, 09:46 »

Долго ковырялся, но пока так вразумительного ничего не получилось.
Общий смысл задачи: просмотр гигантских документов (в пределе до 2^63 байт) в текстовом/шестнадцетиричном виде, не требовательный к памяти.

Пытаюсь переделать компонент QPlainTextEdit под данные условия следующим образом:

Накладываю ограничение на количество строк, хранящихся в компоненте при помощи QPlainTextEdit::setMaximumBlockCount(). Соответственно, количество строк рассчитывается исходя из размеров окна и используемого шрифта.
Таким образом, при добавлении новой строки в компонент и переполнении значения QPlainTextEdit::maximumBlockCount, содержимое компонента будет скролиться вверх.
Очень даже замечательное средство для построчной прокрутки...Но хотелось бы, чтобы у компонента была возможность не только скролинга вверх, но и вниз.
Т.е.:
- курсор находится в позиции QTextCursor::End, делаем QPlainTextEdit::insertPlainText() и содержимое автоматически скролиться вверх.
(такая штука уже заложена в QPlainTextEdit)

- курсор находится в позиции QTextCursor::Start, делаем QPlainTextEdit::insertPlainText() и содержимое автоматически скролиться вниз и в самый верх добавляется новая строка.

А вот последнее хотелось бы реализовать, но пока не знаю как ?
Потому как, при полностью заполненном документе QPlainTextEdit'a последовательность команд:

Код
C++ (Qt)
QTextCursor cursor = textCursor();
cursor.movePosition( QTextCursor::Start );
cursor.insertText( tr("scroll down...\n") );
setTextCursor( cursor );

приводит к тому, что курсор перемещается в начало документа, добавляется новая строка, но, поскольку документ уже переполнен, то только что помещенная в него строка - удаляется, а хотелось бы, чтобы выталкивалась нижняя в данном случае.

Может кто, что посоветует ?


« Последнее редактирование: Октябрь 02, 2009, 09:49 от Exception13 » Записан
SimpleSunny
Гость
« Ответ #1 : Октябрь 02, 2009, 15:58 »

1. Перед вставкой текста удалять необходимое количество блоков снизу, и оформить все в виде наследника QPlainTextEdit.
2. Подправить QTextDocumentPrivate на данный предмет и перекомпилировать Qt. Но будет непереносимое решение.
3. Написать троллям, пусть сами добавят подобный функционал.
4. Создать патч самому и отправить тролям Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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