QTextEdit "предварительно выделить" размер холста

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

У меня динамическая вставка содержимого файла работает, когда я прокручиваю файл. Однако я хочу, чтобы QScrollBar отражал полный размер файла при открытии файла, а не только текущее содержимое QTextDocument.

Вот он в виде скриншота:

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

QTextEdit "предварительно выделить" размер холста

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

QTextEdit "предварительно выделить" размер холста

Обратите внимание на меньший слайдер QScrollBar.

Мне интересно, есть ли какой-то способ предустановить размер нижележащего холста, т.е. было бы легко вычислить высоту всего документа в пикселях, а затем сделать область прокрутки QTextEdit такого размера. Желательно, не прибегая к покраске. Также приветствуются любые другие идеи.

Разве вы не можете динамически дополнять отображаемый контент пустыми строками, чтобы иметь такое же количество строк, как и в файле?

coolparadox 10.07.2018 17:39

@coolparadox Я думал об этом, но тогда в худшем случае я бы кэшировал много пустых строк. Его можно было бы оптимизировать, но суть в том, чтобы бэкэнд обрабатывал фактический файл и обрабатывал только те фрагменты, которые в данный момент видны.

John V. 10.07.2018 18:02

Вам нужен QTextEdit? Если это файл без форматирования, это неподходящий инструмент для работы. Вместо этого вы можете написать его сами.

Kuba hasn't forgotten Monica 11.07.2018 03:23

В конечном итоге предполагается, что это будет текстовый редактор, поэтому QTextEdit имеет для этого множество полезных функций. На данный момент я рассматриваю возможность рисования на QScrollArea ...

John V. 13.07.2018 15:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
87
1

Ответы 1

Начать нужно с программной установки диапазона вертикальной полосы прокрутки:

textEdit->verticalScrollBar()->setMaximum(numberOfLines);

См. Документацию для более подробной информации: QAbstractSlider::setMaximum()

Кроме того, вам, вероятно, потребуется реализовать собственное поведение при испускании сигнала QAbstractSlider::sliderMoved(int). Идея в том, что ваш холст остается маленьким, он предоставляет только небольшое окно для всего текста.

Да, я поигрался с кодом и понял, что лучше всего использовать QScollBar :: setMaximum () для изменения размера холста до подходящего размера. Проблема в том, что использование QTextDocument :: insertText () сбрасывает модификацию. Вызов setMaximum () после каждого insertText () приводит к нежелательному UX. Я буду продолжать в этом разбираться.

John V. 13.07.2018 15:56

Другие вопросы по теме