| DocumentWizard.cpp | ||
| DocumentWizard.h | ||
| DocxBuilder.cpp | ||
| DocxBuilder.h | ||
| DocxWizard.pro | ||
| main.cpp | ||
| README.md | ||
DocxWizard — Модуль пошагового создания Word-документов
Стек технологий
| Компонент | Инструмент | Зачем |
|---|---|---|
| Язык | C++17 | Основной язык проекта |
| GUI + логика | Qt5 (Widgets) | Уже используется в проекте |
| Генерация DOCX | Qt5 (QZipWriter) или QuaZip | DOCX — это ZIP+XML; Qt умеет это нативно |
| Изображения | Qt5 QFile | Чтение и вставка бинарных данных изображений |
Внешних зависимостей нет (кроме Qt5, которая уже есть).
Архитектура
main.cpp
└── MainWindow ← Главное окно; редактор строк-шаблонов
└── DocumentWizard ← Пошаговый диалог (QDialog)
├── parseTemplates() ← Читает строки шаблона → список шагов
├── showStep() ← Показывает нужный UI для шага
├── applyCurrentStep() ← Передаёт данные в DocxBuilder
└── DocxBuilder ← Генерирует .docx файл
├── addHeading()
├── addParagraph()
├── addTable()
├── addImage()
└── save() ← Записывает ZIP/XML в файл
Формат строк шаблона
Строки шаблона «скармливаются» программе в начале работы.
Каждая строка задаёт один шаг мастера:
тип|Подсказка для пользователя|Вариант1;Вариант2;Вариант3
Типы элементов
| Тип | Результат в документе | Примечание |
|---|---|---|
| heading1 | Заголовок 1 (18pt, жирный) | Times New Roman |
| heading2 | Заголовок 2 (15pt, жирный) | Times New Roman |
| heading3 | Заголовок 3 (13pt, жирный) | Times New Roman |
| text | Обычный абзац (12pt) | Times New Roman |
| table | Таблица с заголовками | UI для ввода строк |
| image | Встроенное изображение | PNG/JPG, размер в см |
Пример шаблона
heading1|Введите название документа|Технический отчёт;Пояснительная записка
heading2|Название раздела «Введение»|1. Введение;1. Общие сведения
text|Напишите вводный абзац|Настоящий документ описывает…;В данной работе…
table|Заполните таблицу характеристик|
image|Вставьте схему архитектуры|
heading2|Заключение|4. Заключение;4. Выводы
text|Напишите заключение|В результате работы…;Таким образом…
Сборка
cd docx_module
qmake DocxWizard.pro
make # Linux/macOS
# или
nmake # Windows (MSVC)
Альтернатива QZipWriter → QuaZip
Если Qt5 собрана без приватных заголовков (-private):
# Ubuntu/Debian
sudo apt install libquazip5-dev
# или vcpkg
vcpkg install quazip
Затем в DocxBuilder.cpp замените:
// Было:
#include <QtCore/private/qzipwriter_p.h>
// Стало:
#include <quazip/quazip.h>
#include <quazip/quazipfile.h>
И адаптируйте метод DocxBuilder::save() — используйте QuaZip + QuaZipFile
вместо QZipWriter. API очень похожи.
Интеграция в существующий Qt5 проект
- Скопируйте
DocxBuilder.h/.cppиDocumentWizard.h/.cppв свой проект. - В
.proдобавьте:QT += core-private # для QZipWriter SOURCES += DocxBuilder.cpp DocumentWizard.cpp HEADERS += DocxBuilder.h DocumentWizard.h - Используйте из кода:
QStringList tmpl = loadTemplateFromFile("template.txt"); DocumentWizard dlg(tmpl, this); if (dlg.exec() == QDialog::Accepted) qDebug() << "Сохранено:" << dlg.outputFilePath();
Расширение функциональности
| Задача | Куда добавить |
|---|---|
| Нумерованные списки | DocxBuilder::addList() |
| Верхний/нижний колонтитул | DocxBuilder::buildDocumentXml() — <w:sectPr> |
| Оглавление | XML-элемент <w:fldChar> с TOC |
| Сохранение шаблона в файл | QSettings или простой .txt |
| Предпросмотр документа | LibreOffice → конвертировать в PDF → показать |