Создание приложения Qt на C++
Замечание: Этот урок подразумевает что у вас есть опыт написания простых приложений Qt, проектирования интерфейса пользователя в Qt Designer и использования системы ресурсов Qt.
Этот урок демонстрирует как использовать Qt Creator для написания маленькой программы Qt, Text Finder. Это упрощённая версия примера QtUiTools Text Finder.
Настройка вашей среды
Qt Creator автоматически определяет находится ли Qt в вашей переменной PATH. Если у вас установлено несколько версий Qt, воспользуйтесь инструкциями Выбор профиля Qt для установки пути к Qt.
Создание проекта Text Finder
Замечание: Создайте проект с активным режимом Справка чтобы вы могли следовать этим инструкциям во время работы.
- Выберите Файл > Новый файл или проект... > Проект Qt C++ > GUI приложение Qt > Выбрать....
Откроется диалог Введение и размещение проекта.
- В поле Имя введите TextFinder.
- В поле Создать в введите путь к файлам проекта. Например, C:\Qt\examples, и нажмите Вперёд.
Откроется диалог Выбор требуемых профилей Qt.
- Нажмите Вперёд для использования в вашем проекте профиля Qt, установленного в переменной PATH.
Откроется диалог Информация о классе.
- В поле Имя класса введите TextFinder в качестве имени класса.
- В списке Базовый класс выберите QWidget в качестве типа базового класса.
Замечание: Поля Заголовочный файл, Файл исходников и Файл формы будут обновлены автоматически в соответствии с выбранным вами именем класса.
- Нажмите Вперёд.
Откроется диалог Управление проектом.
- Проверьте настройки проекта и нажмите Завершить для создания проекта.
Проект TextFinder будет содержать следующие файлы:
- textfinder.h
- textfinder.cpp
- main.cpp
- textfinder.ui
- textfinder.pro
Файлы .h и .cpp содержат необходимые строки кода. Файл .pro полностью завершён.
Заполнение недостающих кусков
Начнём с проектирования интерфейса пользователя и затем перейдём к заполнению недостающего кода. В заключение добавим поиск.
Проектирование пользовательского интерфейса
- В режиме Редактор дважды нажмите на файле textfinder.ui в виде Проекты для запуска интегрированного Qt Designer.
- Перетащите следующие виджеты на форму:
- Дважды нажмите на виджет Label и введите текст Keyword.
- Дважды нажмите на виджет Push Button и введите текст Find.
- В панели Свойства измените значение свойства objectName на findButton.
- Нажмите Ctrl+A для выбора виджетов и нажмите Скомпоновать по горизонтали (или нажмите Ctrl+H) для применения горизонтальной компоновки (QHBoxLayout).
- Перетащите виджет Text Edit (QTextEdit) на форму.
- Выберите область экрана и нажмите Скомпоновать по вертикали (или нажмите Ctr+V) для применения вертикальной компоновки (QVBoxLayout).
Применение вертикальной и горизонтальной компоновок обеспечивает масштабирование интерфейса приложения при различных разрешениях экрана.
- Для вызова функции поиска при нажатии пользователем кнопки Find вы будете использовать механизм сигналов и слотов Qt. Сигнал вырабатывается когда происходит определённое событие, а слот - это функция которая вызывается в ответ на определённый сигнал. У виджетов Qt есть предопределённые сигналы и слоты которые вы можете использовать прямо из Qt Designer. Чтобы добавить слот для функции поиска:
- Нажмите Ctrl+S для сохранения изменений.
Для получения дополнительной информации о проектировании форм с Qt Designer смотрите Руководство по Qt Designer.
Завершение заголовочного файла
Файл textfinder.h уже содержит необходимые директивы #include, конструктор, деструктор и объект Ui. Вам потребуется добавить закрытую функцию loadTextFile() для чтения и отображения содержимого входного файла в QTextEdit.
- В режиме Проекты нажмите два раза на файле textfinder.h чтобы открыть его для редактирования.
- Добавьте закрытую функцию в секцию private за Ui::TextFinder как продемонстрировано в следующем фрагменте кода:
private slots:
void on_findButton_clicked();
private:
Ui::TextFinder *ui;
void loadTextFile();
Завершение файла исходных кодов
Теперь заголовочный файл завершён, перейдём к файлу исходных кодов textfinder.cpp.
- В режиме Проекты нажмите два раза на файле textfinder.cpp чтобы открыть его для редактирования.
- Добавьте код для загрузки текстового файла с помощью QFile, чтения его с помощью QTextStream, а затем отображения его в textEdit с помощью setPlainText(). Это продемонстрировано в следующем фрагменте кода:
void TextFinder::loadTextFile()
{
QFile inputFile(":/input.txt");
inputFile.open(QIODevice::ReadOnly);
QTextStream in(&inputFile);
QString line = in.readAll();
inputFile.close();
ui->textEdit->setPlainText(line);
QTextCursor cursor = ui->textEdit->textCursor();
cursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor, 1);
}
- Для использования QFile и QTextStream добавьте следующие директивы #includes в textfinder.cpp:
#include <QtCore/QFile>
#include <QtCore/QTextStream>
- В слоте on_findButton_clicked() добавьте код извлечения строки поиска и использования функции find() для поиска строки в текстовом файле. Это продемонстрировано в следующем фрагменте кода:
void TextFinder::on_findButton_clicked()
{
QString searchString = ui->lineEdit->text();
ui->textEdit->find(searchString, QTextDocument::FindWholeWords);
}
- После того как эти функции завершены, добавьте строку для вызова loadTextFile() в конструкторе, как продемонстрировано в следующем фрагменте кода:
TextFinder::TextFinder(QWidget *parent)
: QWidget(parent), ui(new Ui::TextFinder)
{
ui->setupUi(this);
loadTextFile();
}
Слот on_findButton_clicked() будет вызван автоматически в сгенерированном uic ui_textfinder.h этой строчкой кода:
QMetaObject::connectSlotsByName(TextFinder);
Создание файла ресурсов
Вам потребуется файл ресурсов (.qrc) в котором вы сохраните входной текстовый файл. Входным файлом может быть любой файл .txt с абзацем текста. Создайте текстовый файл с именем input.txt и сохраните его в каталоге textfinder.
Чтобы добавить файл ресурсов:
- Выберите Файл > Новый файл или проект > Qt > Файл ресурсов Qt > Выбрать....
Откроется диалог Выбор размещения.
- В поле Имя введите textfinder.
- В поле Путь введите C:\Qt\examples\TextFinder и нажмите Далее.
Откроется диалог Управление проектом.
- В поле Добавить в проект выберите TextFinder.pro и нажмите Завершить для открытия файла в редакторе кода.
- Выберите Добавить > Добавить префикс.
- В поле Префикс замените префикс по умолчанию на (/).
- Выберите Добавить > Добавить файлы для поиска и добавления input.txt.
Сборка и запуск вашего приложения
Теперь, когда у вас есть все необходимые файлы, нажмите на кнопку чтобы скомпилировать вашу программу.