Алгоритм создания простого текстового редактора на основе библиотеки Qt.
В данной статье будет разобран принцип создания простого текстового редактора, написанного на языке C++ на основе библиотеки Qt. Программа входит в состав примеров поставляемых с пакетом Qt Creator. На её примере показаны: приёмы создания интерфейса приложения на основе QMainWindow, загрузка и сохранение текстовых файлов с помощью QFile и QTextStream.
Приложение выводит на экран окно простого текстового редактора, интерфейс которого позволяет загружать и сохранять текстовые файлы. Текст программы для удобства содержится в одном листинге. В функции main() на основе пользовательского класса Notepad создаётся объект редактора и происходит запуск приложения.
Класс Notepad создается на базе класса QMainWindow, предоставляющего механизм быстрого создании приложений с гибким интерфейсом. Использование в подавляющем большинстве приложений одних и тех же элементов пользовательского интерфейса, позволило выделить набор стандартных средств, ускоряющих разработку интерфейса, которые реализованы в классе QMainWindow.
В конструкторе класса реализован стандартный алгоритм создания интерфейса с помощью инструментов класса QMainWindow (рисунок 1). Объекты класса QAction предназначены для привязки элементов пользовательского интерфейса к одному объекту действия и дальнейшего соединения сигнала, оповещающего о желании пользователя выполнить определенное действие, с соответствующим слотом приложения.
К примеру, в приложении с гибким интерфейсом одну и ту же команду можно вызвать с помощью опции во всплывающем меню, с помощью пиктограммы на панели инструментов или с помощью комбинации горячих клавиш. В коде программы все эти действия соединяются с одним объектом QAction.
(рисунок№1)
В конструкторе создаются объекты для трёх действий: Load, Save и Exit. С помощью метода connect() сигналы, оповещающие о выборе пользователем одного из этих действий, подключаются к слотам приложения. Функция QMainWindow::menuBar() создает панель меню и возвращает указатель на неё. Метод QMenuBar::addMenu добавляет новое меню на панель меню. Функция QMenu::addAction() добавляет новое действие в список всплывающего меню. В конце тела конструктора создаётся виджет текстового редактора и устанавливается в качестве центрального элемента приложения.
Слоты open() и save() идентичны по структуре, за исключением того, что в одном из них происходит загрузка текста из файла в окно редактора, а в другом наоборот – копирование данных из редактора в файл (рисунок 2).
(рисунок №2)
Метод QFileDialog::getOpenFiieName предназначен для определения пути к требуемому файлу. Он вызывает диалоговое окно выбора файла (рисунок 3).
(рисунок №3)
Первым аргументом в этот метод передаётся указатель на объект-предок, вторым передается текст заголовка окна, третьим — строка, представляющая собой рабочую директорию. Четвертый аргумент используется для создания фильтра, задающего расширение.
Строковая переменная, хранящая путь к нужному файлу, передается в конструктор класса QFile. Объект этого класса отражает в программе целевой файл, а сам класс состоит из группы методов, представляющих собой набор действий, которые можно произвести с файлом.
Операция открытия файла QFile::open(), в случае успешного открытия, возвращает значение true. Если эта процедура возвратит противоположное значение, то программа, с помощью метода QMessageBox::critical(), создаст окно с сообщением об ошибке.
Для чтения и записи текста в библиотеке Qt предлагается использовать класс потока QTextStream.
Для связи потока с целевым файлом в конструктор потока передаётся указатель на объект файла.
Метод QTextStream::readAll() считывает всё содержимое файла.
Данный материал о кроссплатформенном фреймворке Qt подготовлен автором @maximus00.