Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3 Прикладное программирование на языке c++ с использованием среды Qt Creator 5.doc
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
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. Такой способ ориентирован на разработку приложение для сенсорных устройств (планшетов и т.п.), что также выходит за рамки данного пособия.