Структура проекта и основы ООП




Рассмотрим те элементы, которые создала программа при создании первого проекта. Он содержит файлы 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 и название класса прародителя.

необязательная метка имя класса прародителя
class MainWindow: public QMainWindow
обязательная метка имя класса

Это пример реализации принципа наследования, используемого в 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. Такой способ ориентирован на разработку приложение для сенсорных устройств (планшетов и т.п.), что также выходит за рамки данного пособия.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-04-03 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: