Долго ковырялся, но пока так вразумительного ничего не получилось.
Общий смысл задачи: просмотр гигантских документов (в пределе до 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 );
приводит к тому, что курсор перемещается в начало документа, добавляется новая строка, но, поскольку документ уже переполнен, то только что помещенная в него строка - удаляется, а хотелось бы, чтобы выталкивалась нижняя в данном случае.
Может кто, что посоветует ?