Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
vp-webdev
7 лет назад

Алгоритм создания простого текстового редактора на основе библиотеки 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.

47
221.810 GOLOS
На Golos с August 2017
Комментарии (5)
Сортировать по:
Сначала старые