Я занимаюсь разработкой редактора документов WYSIWYG.Редактор построен на основе инфраструктуры Qt, потому что Linux / KDE является основной платформой, на которой он будет работать.
До сих пор я использовал виджет QTextEdit и получил базовое редактирование и форматирование текста. Однако яостановитесь на том, как выполнить следующее требование:
Документ разбит на несколько уровней заголовков, и сверху должна быть автоматически сгенерированная таблица содержания.
Вы должны бытьвозможность выбрать стиль для абзаца текста (заголовок 1, заголовок 2, ..., абзац), и если вы выберете стиль заголовка, то перед строкой будет стоять номер раздела.
Например,абзац, содержащий текст « Спецификация проекта » со стилем «заголовок 3», может отображаться как:
3.4.2 Спецификация проекта
Гдепрефиксный номер раздела ' 3.4.2 ' был создан автоматически.Номер раздела должен обновляться по мере того, как заголовки вставляются и удаляются над ним.Пользователь не должен иметь возможность изменять или удалять этот префикс самостоятельно.Если они удаляют префикс, тогда абзац должен вернуться к стилю ' абзац ', а не оставаться заголовком.
Поскольку заголовки вставлены / изменены / удалены, оглавление должноавтоматически обновляться.Пользователь также не должен иметь возможности изменять или удалять оглавление.
Я застрял в том, как реализовать эту функцию в моем редакторе.Возможно, я думал о сохранении дерева нередактируемых диапазонов (диапазонов, которые включают оглавление и каждый из префиксов), и каждый раз, когда изменяется позиция курсора / текущий выбор, я устанавливаю элемент управления QTextEdit только для чтения, если выбор перекрывается иликурсор находится внутри диапазона.Но затем возникает проблема поддержания всех этих диапазонов в актуальном состоянии (перестройка дерева) каждый раз, когда что-то изменяется, что было бы довольно часто в редакторе WYSIWYG.
Я застрял в том, как действовать иБуду признателен за любые советы по этому вопросу.