- •Первый проект Создание графического приложения
- •Обучающие возможности Qt Creator
- •Структура проекта и основы ооп
- •Обработка событий с использованием сигналов и слотов
- •Функция connect
- •Создание собственных слотов и сигналов
- •Полезные мелочи Использование класса qDebug
- •Работа с объектами на примере класса qString
- •Контейнер qStringList
- •Использование редактора форм (Qt Designer)
- •Использование контейнеров на примере qList
- •Элементы формирования
- •Элементы управления Кнопки (Button)
- •Обработка стандартных событий
- •Углубление знаний Работа с файлами, диалоги Класс qFile
- •Класс qDir
- •Стандартные диалоги, диалоги выбора файла
- •Специальные вопросы Создание графика функций и пример переопределения функции на форме
- •Использование многопоточности
- •Создание текстового меню действий (action)
- •Дополнительные возможности
- •Рабочий стол – класс qDesktopWidget
- •Сохранение настроек приложения – класс qSettings
- •Окно заставка приложения (qSplashScreen)
- •Управление сессией (qSessionManager) Иконка в области оповещения (qSystemTrayIcon)
- •Описание приложения
- •Совместное использование Qt с платформозависимыми api
- •Использование ресурсов
- •Установка изображения (иконки) для виджетов
- •Установка иконки для exe-файла
- •Создание приложений для андроид
- •Установка инструментов разработки для андроид
- •Установка пиктограммы для приложения
- •Подсветка кода
- •Сокрытие и отображение кода
- •Автоматическое дополнение кода
- •А где определен атрибут?
- •Контекстная справка
- •Использование английского языка
- •Использование документации
- •Задание 2 Тема 4 Работа с файлами
- •Задание 1 работа с файлами (св)
- •Тема 5 Работа с графикой Задание 1 Графики функций
- •Задание 2 Рисование графических примитивов
- •Тема 6 Создание полноценного приложения
- •Список литературы
Обучающие возможности Qt Creator
Qt Creator содержит ряд возможностей, которые будут полезны при изучении или расширении знаний по программированию. Во-первых в установочный пакет входит набор готовых программ-примеров. Их можно увидеть, последовательно нажав кнопки начало (1) и примеры (2). Вы получаете доступ к списку готовых приложений с исходным кодом и встроенной справкой.
Рисунок – к использованию примеров и справки
Обычно техническая документация это сложный для восприятия материал, требующий достаточных знаний в заданной области. В этом ряду Qt представляет приятное исключение. Документация библиотеки содержит не только исчерпывающую информацию о функциях и классах библиотеки, но и контекстные примеры кода (1 рис. ниже).
Рисунок – использование справочной документации
Справочная документация может быть вызвана в режиме содержания или в режиме поиска. Поисковый запрос вводится в поле 2 на рис. выше.
Структура проекта и основы ооп
Рассмотрим те элементы, которые создала программа при создании первого проекта. Он содержит файлы MyProgect.pro, mainwindow.h, mainwindow.cpp, main.cpp, mainwindow.ui (см. 1 на рис. 3). MyProgect.pro – управляющий файл проекта. В нем перечислены все элементы, используемые в проекте, в частности модули библиотеки.
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4):QT += widgets
TARGET = test
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORM += mainwindow.ui
Названия наиболее значимых элементов проекта приведены в [Иванова с. 13], [Шлее Qt4 2007, с 65-67]. Мы рассмотрим только подключение модулей. Это текстовая запись вида QT += <имя_модуля>. Все, используемые в проекте модули могут быть перечислены в одной строке (QT += core gui). В таблице ниже перечислены наиболее востребованные из них.
Таблица 2 – модули Qt
Модуль |
Назначение |
Типовые классы |
core |
Базовые классы не содержащие графические элементы |
QString, QStringList, QDebug, QDir, QFile, QTimer, QElapsedTimer, QThread |
gui |
Базовые классы для создания графического интерфейса пользователя (GUI) |
QBitmap, QIcon, QImage, QPixmap, QPicture, QVector2D, QVector3D, QVector4D, QPaintEvent, QWindow |
widgets |
Классы графических интерфейсов |
QDialog, QMainWindows, QFileDialog, QInputDialog, QLineEdit, QTextEdit, QTreeWidget |
multimedia |
Классы для управления аудио, видео и камерой. |
QCamera, QMediaPlayer, QMediaPlaylist, QMediaResource, QSound, QSoundEffect |
multimediawidgets |
Классы графического интерфейса для классов модуля multimedia |
QVideoWidget, QVideoWidgetControl, QCameraViewfinder, QGraphicsVideoItem |
charts |
Классы для построения графиков функций |
QChart, QChartView, QLineSeries |
opengl |
Классы для создания трёхмерной графики |
|
Дополнительные сведения о редактировании pro-файлов см. в. Файл main.cpp – главный файл проекта. В нём создаётся функция main – главная функция проекта. Содержимое файла:
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char* argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
Аргументы функции main служат для взаимодействия программы с операционной системой. Операционная система позволяет запускать программу различными способами, например, из командной строки или с помощью ярлыка. При этом после имени программы могут быть указаны аргументы, количество которых заранее неизвестно. Все аргументы передаются программе в виде массива строк argv, а их количество – в виде целой переменной argс. В файле создаётся 2 объекта классов QApplication и MainWindow. QApplication является стандартным объектом библиотеки Qt. MainWindow – новый класс, созданный в нашем проекте по заготовленному шаблону. Для написания простых приложений не возникает необходимость изменять функцию main. Поэтому не будем на ней останавливаться и перейдём к рассмотрению класса MainWindow. Параллельно будем рассматривать необходимые теоретические сведения. Класс, по сути, является типом данных. Поэтому запись
MainWindow w;
аналогична записи
int i;
Класс объектов (или просто класса) – программная структура, в которой данные и функции для их обработки образуют единое целое. Этот принцип называется инкапсуляция (от англ. «содержание в оболочке»). Все файлы с названиями mainwindow содержат описание одноимённого класса. На его примере рассмотрим теорию их создания. Начитается всё с описания интерфейсов класса. Оно дано в файле mainwindow.h.
Начинается описание с ключевого слова class, за которым следует его имя. Имя каждого класса должно быть уникальным. после этого через двоеточие записаны ключевое слово public и название класса прародителя.
Это пример реализации принципа наследования, используемого в C++. Его применение приводит к тому, что наш класс обладает всеми данными и функциями, которые заданы в прародителе. Любые функции в новом объекте могут быть переопределены. Далее следует описание класса. Начинается оно со специального макроса Q_OBJECT, используемого в объектах библиотеки Qt для поддержки сигналов и слотов [Шлее Qt4 2007 с. 40, 68]. Основное описание, включающее переменные и функции находится состоит из трёх блоков, озаглавленных private (собственный), protected (защищённый, в типовой реализации отсутствует), public (общедоступный).
Хорошим стилем программирования считается организация доступа к элементам данных с помощью функций или методов без использования оператора присваивания.
Далее записываются две функции (конструктор и деструктор). Название конструктора совпадает с названием класса. Эта функция срабатывает при создании класса.
explicit MainWindow(QWidget *parent = 0);
Необязательное ключевое слово explicit используется в C++ для создания «явных конструкторов». В данной программе его можно удалить. Деструктор, имя которого состоит из знака тильда («~») и название класса. Он срабатывает при удалении объекта.
~MainWindow();
В разделе private объявлен объект указатель на объект Ui::MainWindow
Ui::MainWindow *ui;
Этот указатель специфического типа запись говорит о том, что объект будет получать наследовать объекты из редактора Qt Designer (см. ниже). С его помощью можно получить доступ ко всем объектам, размещённым на форме.
Доступ к элементам класса, как и к элементам структур, осуществляется с помощью оператора «.» как это сделано в файле main. Если объект создан через указатель, то доступ осуществляется с помощью оператора «–>». Поэтому запись
MainWindow *w;
w = new MainWindow;
w->show();
идентична записи в файле main, приведённой выше. Редактор Qt Creator содержит функцию подмены оператора «.» на оператор «->». Так, работая с любым объектом, для использования его внутренних функций нужно ввести его имя и нажать «.». Если объект имеет место работа с указателем на объект, то произойдёт замена операторов.
В файле mainwindow.cpp реализованы все объявленные в mainwindow.h функции (в данном случае конструктор и деструктор). Как и для простых функций, для функций-элементов класса существует возможность реализации в точке объявления. Но, как правило, используется разделение объявления (интерфейса) и реализации. Поэтому реализация выглядит следующим образом
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
В конструкторе производится лишь одна операция – привязка формы (ui) к нашему объекту. Для этих случаев в c++ предусмотрен указатель this. Этим указателем можно пользоваться так, как если бы некий объект уже был создан и мы уже его используем. В деструкторе производится толь удаление объекта формы. Такая простота описания обусловлена преимуществами, предоставляемыми наследованием. Так запись QMainWindow(parent) запускает конструктор объекта-родителя. То есть, новый класс настраивается идентично старому.
Следующим типовым шагом является размещение на форме графических элементов управления и отображения (виджетов). Это можно сделать двумя способами. С помощью функций в коде и с помощью визуального редактора Qt Designer. В данном пособии рассмотрен только второй. Необходимые виджеты могут быть созданы и размещены на форме без использования визуального редактора [с. Иванова 33-36], что в данном пособии не рассматривается.
В библиотеки Qt 5 существует альтернативная возможность создания графического интерфейса пользователя с помощью языка QML. Такой способ ориентирован на разработку приложение для сенсорных устройств (планшетов и т.п.), что также выходит за рамки данного пособия.
