# Лабораторная работа № 3–4. Разработка текстового редактора средствами Qt. Используя функционал Qt, разработать текстовый редактор с поддержкой расцветки синтаксиса. ## Часть 1 1. Предоставить возможность открытия нескольких файлов посредством использования виджета вкладок (`QTabWidget`). 2. Редактор должен производить анализ расширения файлов при открытии. Если файл имеет расширение файлов исходных кодов программ (например, .h, .cpp или .hpp – расширения файлов исходных кодов программ на C++), то при открытии необходимо выполнить расцветку синтаксиса с использованием класса `QSyntaxHighlighter`. 3. Все расцветки должны быть зарегистрированы в xml-файле настроек приложения. В данном файле регистрируются расширения файлов для данного языка программирования и соответствующие ключевые слова и регулярные выражения. Как минимум должна быть предоставлена расцветка синтаксиса C++. Пример xml-файла настроек редактора: ```xml ``` ## Часть 2 4. Реализовать меню (`QMenu`), содержащее следующие пункты: * Файл: + Новый (Создание нового документа) + Открыть (Открытие существующего документа на основе `QFileDialog`) + Сохранить (Сохранение документа из активной вкладки) + Сохранить как… (Сохранение в заданном формате на основе `QFileDialog`) + Сохранить все (Сохранить все открытые документы) + Закрыть (Закрыть текущий документ) + Закрыть все (Закрытие всех открытых документов) + Выход (Закрыть редактор с диалогом сохранения несохраненных документов) * Правка: + Вырезать + Копировать + Вставить + Удалить + Выделить все * Вид: + Показать проводник (Создание обозревателя каталогов с использованием `QDockWidget` и `QFileSystemModel`. При выборе документа в обозревателе открывать документ в новой вкладке.) + Показать обозреватель открытых документов (Создание обозревателя открытых документов на основе `QDockWidget` и `QStringListModel`. При щелчке по имени документа должна становиться активной его вкладка.) 5. Перед закрытием приложения должно выводиться сообщение с предложением сохранить измененные документ(-ы). Окно сообщения разработать на основе классов `QDialog` и `QTableWidget`. В первом столбце таблицы выводить имя файла, во втором - его расположение. При закрытии отдельной вкладки предлагать сохранять измененный файл с использованием диалогового окна сообщений (`QMessageBox`). 6. Возможные ошибки обрабатывать выводом окна критических сообщений. 7. Для открытия и сохранения файлов использовать стандартное диалоговое окно выбора файлов (`QFileDialog`). 8. Продублировать пункты меню Новый, Открыть, Сохранить, Сохранить все в панели инструментов Tool Bar (`QToolBar`). Изображения для рисунков соответствующих кнопок хранить в ресурсах. ## Литература 1. [Пример реализации расцветки](https://doc.qt.io/qt-5/qtwidgets-richtext-syntaxhighlighter-example.html) 2. [Пример создания виджета для нумерации строк](https://doc.qt.io/qt-5/qtwidgets-widgets-codeeditor-example.html)