docx-generator/main.cpp

110 lines
4.8 KiB
C++
Raw Permalink Normal View History

2026-04-29 02:15:22 +00:00
#include <QApplication>
#include <QMainWindow>
#include <QPushButton>
#include <QVBoxLayout>
#include <QTextEdit>
#include <QLabel>
#include <QWidget>
#include <QStringList>
#include <QMessageBox>
#include "DocumentWizard.h"
// ============================================================
// Пример главного окна приложения
// ============================================================
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget* parent = nullptr) : QMainWindow(parent) {
setWindowTitle("Генератор Word-документов");
resize(600, 400);
auto* central = new QWidget(this);
setCentralWidget(central);
auto* layout = new QVBoxLayout(central);
auto* info = new QLabel(
"<b>Шаблон документа</b> задаётся набором строк.<br>"
"Каждая строка: <code>тип|подсказка|выбор1;выбор2</code><br>"
"Типы: heading1, heading2, heading3, text, table, image",
this);
info->setWordWrap(true);
info->setStyleSheet("background:#fffbe6; padding:10px; border-radius:4px;");
layout->addWidget(info);
m_templateEdit = new QTextEdit(this);
m_templateEdit->setPlaceholderText("Введите строки шаблона…");
m_templateEdit->setPlainText(defaultTemplate());
m_templateEdit->setFont(QFont("Courier New", 10));
layout->addWidget(m_templateEdit, 1);
auto* startBtn = new QPushButton("▶ Запустить мастер создания документа", this);
startBtn->setStyleSheet(
"QPushButton { background:#2c5f8a; color:white; font-weight:bold;"
" padding:10px; border-radius:6px; font-size:13px; }"
"QPushButton:hover { background:#3a7ab5; }");
layout->addWidget(startBtn);
connect(startBtn, &QPushButton::clicked, this, &MainWindow::launchWizard);
}
private slots:
void launchWizard() {
QStringList lines = m_templateEdit->toPlainText().split('\n');
DocumentWizard wizard(lines, this);
wizard.exec();
}
private:
QTextEdit* m_templateEdit;
static QString defaultTemplate() {
// Это и есть «строки, скармливаемые в начале работы программы»
return
"# Строки шаблона — определяют структуру будущего документа\n"
"# Формат: тип|подсказка пользователю|вариант1;вариант2;вариант3\n"
"\n"
"heading1|Введите название документа (Заголовок 1)|"
"Технический отчёт;Пояснительная записка;Руководство пользователя\n"
"\n"
"heading2|Выберите название раздела «Введение»|"
"1. Введение;1. Общие сведения;1. Назначение системы\n"
"\n"
"text|Напишите вводный абзац|"
"Настоящий документ описывает…;В данной работе рассматривается…;"
"Целью настоящего документа является…\n"
"\n"
"heading2|Раздел «Характеристики»|"
"2. Технические характеристики;2. Параметры системы\n"
"\n"
"table|Заполните таблицу характеристик системы|\n"
"\n"
"heading2|Раздел со схемой|"
"3. Структурная схема;3. Архитектура решения\n"
"\n"
"image|Вставьте изображение схемы или диаграммы|\n"
"\n"
"heading2|Заключительный раздел|"
"4. Заключение;4. Выводы\n"
"\n"
"text|Напишите заключение|"
"В результате работы были получены…;Таким образом, в ходе…;"
"Проведённые исследования показали…\n";
}
};
// ============================================================
// main
// ============================================================
int main(int argc, char* argv[]) {
QApplication app(argc, argv);
app.setStyle("Fusion");
MainWindow w;
w.show();
return app.exec();
}
#include "main.moc"