Я пишу простой клиент текстового редактора, который получает данный файл по частям, вместо того, чтобы читать его сразу. Например, если у меня есть файл на 10 000 строк, я получу только первые 25 строк + некоторую лишнюю информацию, когда открою его в клиенте. Когда я прокручиваю файл вниз, он загружает строки, которые появляются в поле зрения динамически.
У меня динамическая вставка содержимого файла работает, когда я прокручиваю файл. Однако я хочу, чтобы QScrollBar отражал полный размер файла при открытии файла, а не только текущее содержимое QTextDocument.
Вот он в виде скриншота:
QTextEdit и QScrollBar, когда файл изначально загружается только с первым фрагментом строк.

То же самое, когда я прокрутил файл до конца и оставшаяся часть была загружена.

Обратите внимание на меньший слайдер QScrollBar.
Мне интересно, есть ли какой-то способ предустановить размер нижележащего холста, т.е. было бы легко вычислить высоту всего документа в пикселях, а затем сделать область прокрутки QTextEdit такого размера. Желательно, не прибегая к покраске. Также приветствуются любые другие идеи.
@coolparadox Я думал об этом, но тогда в худшем случае я бы кэшировал много пустых строк. Его можно было бы оптимизировать, но суть в том, чтобы бэкэнд обрабатывал фактический файл и обрабатывал только те фрагменты, которые в данный момент видны.
Вам нужен QTextEdit? Если это файл без форматирования, это неподходящий инструмент для работы. Вместо этого вы можете написать его сами.
В конечном итоге предполагается, что это будет текстовый редактор, поэтому QTextEdit имеет для этого множество полезных функций. На данный момент я рассматриваю возможность рисования на QScrollArea ...





Начать нужно с программной установки диапазона вертикальной полосы прокрутки:
textEdit->verticalScrollBar()->setMaximum(numberOfLines);
См. Документацию для более подробной информации: QAbstractSlider::setMaximum()
Кроме того, вам, вероятно, потребуется реализовать собственное поведение при испускании сигнала QAbstractSlider::sliderMoved(int). Идея в том, что ваш холст остается маленьким, он предоставляет только небольшое окно для всего текста.
Да, я поигрался с кодом и понял, что лучше всего использовать QScollBar :: setMaximum () для изменения размера холста до подходящего размера. Проблема в том, что использование QTextDocument :: insertText () сбрасывает модификацию. Вызов setMaximum () после каждого insertText () приводит к нежелательному UX. Я буду продолжать в этом разбираться.
Разве вы не можете динамически дополнять отображаемый контент пустыми строками, чтобы иметь такое же количество строк, как и в файле?