Russian Qt Forum
Сентябрь 30, 2024, 22:36
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Корректировка отображения текста в QTextEdit. Как сделать правильно?
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Корректировка отображения текста в QTextEdit. Как сделать правильно? (Прочитано 5330 раз)
Dimka Novikov
Гость
Корректировка отображения текста в QTextEdit. Как сделать правильно?
«
:
Апрель 22, 2016, 10:14 »
Ребята, привет. Помогите разобраться.
Есть такая задача - текст в редакторе (QTextEdit) разделён на страницы. Текст имеет несколько фиксированных стилей оформления. Если абзац, аформленный определённым стилем попадает на разрыв страниц, как тут:
нужно его скорректировать так, чтобы получился вот такой вид (разрыв текста делается по концам предложений):
Тут есть такой нюанс, что обновлять внешний вид нужно в режиме реального времени - прямо во время набора текста, т.е. если пользователь удалил текст перед этим абзацем, или ввёл новый, нужно скорректировать разрыв, или вообще его убрать, если он сместился на следующую страницу.
Подскажите пожалуйста, как лучше сделать, или как бы вы решали эту проблему?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Корректировка отображения текста в QTextEdit. Как сделать правильно?
«
Ответ #1 :
Апрель 22, 2016, 12:11 »
Если ничего стандартного нет (не в курсе), то однозначно какие-то QLabel рисуемые поверх QTextEdit (но ни в коем случае не лезть в его содержимое)
Записан
Dimka Novikov
Гость
Re: Корректировка отображения текста в QTextEdit. Как сделать правильно?
«
Ответ #2 :
Апрель 22, 2016, 22:29 »
Igors, спасибо. Я не нашёл никаких стандартных подходов к решению такой задачи. Просто рисовать сверху не выйдет, т.к. весь оставшийся текст должен быть сдвинут вниз после переноса...
Сейчас я делаю через правку документа. Это работает приемлемо на небольших документах до 15 страниц, с 40 страниц уже начинаются заметные лаги, а 300-страничных текстах просто вообще
Хотя конечно может быть нужно просто как следует оптимизировать его... Но что-то мне тоже подсказывает, что надо идти другим путём, да вот не пойму каким?!...
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Корректировка отображения текста в QTextEdit. Как сделать правильно?
«
Ответ #3 :
Апрель 23, 2016, 00:35 »
А как разбиение на страницы устроено?
Каждая страница это отдельный QTextEdit?
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Корректировка отображения текста в QTextEdit. Как сделать правильно?
«
Ответ #4 :
Апрель 23, 2016, 08:30 »
Цитата: Dimka Novikov от Апрель 22, 2016, 22:29
Сейчас я делаю через правку документа. Это работает приемлемо на небольших документах до 15 страниц, с 40 страниц уже начинаются заметные лаги, а 300-страничных текстах просто вообще
Хотя конечно может быть нужно просто как следует оптимизировать его...
Не, это точно трясина из которой не выбраться
Цитата: Dimka Novikov от Апрель 22, 2016, 22:29
Я не нашёл никаких стандартных подходов к решению такой задачи. Просто рисовать сверху не выйдет, т.к. весь оставшийся текст должен быть сдвинут вниз после переноса...
Ну не знаю, так ли уж необходим сдвиг... Тогда я бы сначала подзубрил все смежные классы (QTextBlock, QTextFormat, QTextLine и.т.п), а главное - нашел бы в исходниках место где он форматирует страницу. Необязательно, но очень возможно он использует QTextLayout (см напр QTextBlock::layout), вот попытаться его перехватить, чтобы выдать "виртуальную" строку. Ну это конечно пока фантазии, просто напр-е в котором я бы рыл.
Записан
Dimka Novikov
Гость
Re: Корректировка отображения текста в QTextEdit. Как сделать правильно?
«
Ответ #5 :
Апрель 23, 2016, 14:43 »
Racheengel, устроено так, что объекту QTextDocument назначается свойство pageSize, дальше QTextEdit через QTextDocumentLayout рисует документ с отступами между страниц, а потом сверху я ручками рисую оформление.
Igors, вот копаю... По-видимому придётся наследоваться от QTextDocumentLayout и все такие ситуации самостоятельно обрабатывать прорисовывая нужные абзацы текста.
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Корректировка отображения текста в QTextEdit. Как сделать правильно?
«
Ответ #6 :
Апрель 23, 2016, 21:31 »
А номера страниц тоже поверху рисуются?
Как тогда печать реализована?
Возможен вариант редактирования без доп. разметки, а уже при просмотре и печати бить на страницы и добавлять нужные строки?
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Dimka Novikov
Гость
Re: Корректировка отображения текста в QTextEdit. Как сделать правильно?
«
Ответ #7 :
Апрель 25, 2016, 10:08 »
Цитата: Racheengel от Апрель 23, 2016, 21:31
А номера страниц тоже поверху рисуются?
Как тогда печать реализована?
Да, номера самостоятельно рисуются. При печати они также дорисовываются в процессе формирования страниц.
Цитата: Racheengel от Апрель 23, 2016, 21:31
Возможен вариант редактирования без доп. разметки, а уже при просмотре и печати бить на страницы и добавлять нужные строки?
Когда проект только начинался, я так и хотел сделать редактор по типу вижу - что имею в виду, но большая часть пользователей (да практически все) затребовали сделать WYSIWYG-режим, так что без вариантов.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...