Быстрота. QT. Простота. Мощность

Содержание

Слайд 2

Кросс-платформенная библиотека QT разработана финской компанией Trolltech, ныне принадлежит корпорации Nokia.

Кросс-платформенная библиотека QT

разработана финской компанией Trolltech, ныне принадлежит корпорации Nokia.


Qt реализована на языке программирования C++
Возможности C++ в Qt значительно расширенны с помощью макросов и MOC (Meta Object Compiler): добавлены сигналы/слоты, появилось возможность использовать в собственных классах свойства (property).
Для программистов Python, Ruby, Php и Perl также реализованы интерфейсы взаимодействия, которые, как правило, используются для построения графического интерфейса пользователя.
Слайд 3

QT Кросс-платформенная среда для разработки приложений с графическим интерфейсом на C++

QT

Кросс-платформенная среда для разработки приложений с графическим интерфейсом на C++
Подразумевает

коммерческое и свободное лицензирование

Среда для разработки мобильных приложений систем IOS, Android, Windows Phone, Windows RT, BlackBerry
Полностью объектно-ориентированная библиотека

Слайд 4

QT – полный инструментарий для программирования Поддержка 2-х и 3-хмерной графики

QT – полный инструментарий для программирования

Поддержка 2-х и 3-хмерной графики
Возможность интернационализации
Использование

форматов JSON, XML
STL-совместимая библиотека контейнеров

Поддержка стандартных протоколов ввода-вывода
Классы для работы с сетью
Поддержка программирования баз данных Oracle, Microsoft SQL Server, MySQL, SQLite, PostgreSQL, IBM DB2, Sybase ,...
И многое другое...

Слайд 5

Используют QT QT используют более 4000 компаний: Adobe, Amazon, Tesla Canon,

Используют QT

QT используют более 4000 компаний:
Adobe, Amazon, Tesla
Canon, Bosch, Sun,

NASA,
Google, Oracle, Intel, IBM,
Panasonic, Xerox, Sony,
Siemens, Yamaha, Nokia,
Rakuten, HP, Disney, BMW, Mersedes, Samsung, Volvo, Skype, Dream Works, ….
Слайд 6

Написаны на QT Рабочий стол KDE, используемый в Linux Редактор трехмерной

Написаны на QT

Рабочий стол KDE, используемый в Linux
Редактор трехмерной графики Autodesk

Maya
Viber
Telegram
Google Earth (карта мира)

Virtual Box (virtualbox.org)
VLC Media player (свободный проигрыватель) (videolan.org)
Kindle от Amazon (загрузка, чтение книг, газет, журналов) (amazon.com)
Bitcoin (bitcoin.org)
Adobe Photoshop Album (программа для обработки растровых изображений)

Слайд 7

Слайд 8

Модули QT для других языков программирования PyQt Perl Qt Qt# PHP Ruby …..

Модули QT для других языков программирования

PyQt
Perl Qt
Qt#
PHP
Ruby
…..

Слайд 9

Установка Qt https://download.qt.io/official_releases/qt/ Установка Qt предполагает регистрацию в Qt и создание

Установка Qt

https://download.qt.io/official_releases/qt/
Установка Qt предполагает регистрацию в Qt и создание Qt

Account, данное действие необходимо для проверки лицензии (коммерческая/некоммерческая).
Выбираем каталог для установки Qt *.* Обратите внимание, адрес каталога указывается латинскими буквами (без кириллицы) и без пробелов!
Выбираем компоненты, которые хотим установить (обязательно MinGW 32bit или 64bit ! QtCreator )
Слайд 10

Слайд 11

Слайд 12

Слайд 13

Слайд 14

Слайд 15

Qt Creator

Qt Creator

Слайд 16

Слайд 17

Слайд 18

Слайд 19

Слайд 20

Слайд 21

Код консольной программы #include #include int main(int argc, char *argv[]) {

Код консольной программы

#include
#include
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

std::cout<<"Qt version:"<< qVersion()<< std:: endl;
return a.exec();
}
Слайд 22

Слайд 23

Код оконной программы #include "mainwindow.h" #include #include int main(int argc, char

Код оконной программы

#include "mainwindow.h"
#include
#include
int main(int argc, char *argv[])
{
QApplication a(argc,

argv);
//MainWindow w;
QLabel lbl("Hello, world!");
// w.show();
lbl.show();
return a.exec();
}
Слайд 24

Слайд 25

Модули Qt QtCore QtGui QtWidgets QtQuick QtQML QtNetwork QtSql QtSvg QtXml QtXmlPattern QtMultimedia QtMultimediaWidgets QtPrintSupport QtTest

Модули Qt

QtCore
QtGui
QtWidgets
QtQuick
QtQML
QtNetwork
QtSql

QtSvg
QtXml
QtXmlPattern
QtMultimedia
QtMultimediaWidgets
QtPrintSupport
QtTest

Слайд 26

Пространство имен Qt Qt:: red using namespace Qt;

Пространство имен Qt

Qt:: red

using namespace Qt;

Слайд 27

QtCore Контейнерные классы: QList, QVector, QMap, QVariant, QString Классы ввода-вывода QIOdevice,

QtCore

Контейнерные классы:
QList, QVector, QMap,
QVariant, QString
Классы ввода-вывода
QIOdevice, QtextStream, QFile
Классы процессов и

многопоточности:
QThread, QWaitCondition, QMutex

Классы для работы с таймером:
QBasicTimer, QTimer
Классы для работы с датой и временем:
QDate QTime
Класс QObject
Класс событий: QEvent
Класс настроек приложения :
QSettings

Слайд 28

QtCore Класс приложения: QCoreApplication Классы поддержки анимации: QAbstractAnimation , QVariantAnimation Классы

QtCore

Класс приложения: QCoreApplication
Классы поддержки анимации:
QAbstractAnimation , QVariantAnimation
Классы для машины состояний:
QStateMachine, QState

Классы

моделей интервью:
QAbstractModelItem,
QStringListModel,
QAbstractProxyModel
Слайд 29

QCoreApplication Должен создаваться в приложение только один раз Управляет событиями между

QCoreApplication

Должен создаваться в приложение только один раз
Управляет событиями между приложением и

операционной системой
Передает аргументы командной строке
Этот класс можно наследовать, чтобы перезаписать некоторые методы
Слайд 30

Модуль QtGui Предоставляет классы интеграции с оконной системой, с OpenGL Класс

Модуль QtGui

Предоставляет классы интеграции с оконной системой, с OpenGL
Класс QWindow
Класс QGuiApplication


Содержит механизм цикла событий
Получает доступ к буферу обмена
Управляет формой курсора мыши
Инициализирует необходимые настройки приложения
Слайд 31

Модуль QtWidgets QWidget QVBoxLayout, QHBoxLayout QLabel, QLCDNumber QPushButton,QCheckButton,QRadioButton QSlider, QScrollBar QLineEdit,

Модуль QtWidgets

QWidget
QVBoxLayout, QHBoxLayout
QLabel, QLCDNumber
QPushButton,QCheckButton,QRadioButton
QSlider, QScrollBar
QLineEdit, QSpinBox

QComboBox, QToolBox
QMainWindow, QMenu
QMessageBox, QDialog
QPainter, QBrush, QPen,

QColor
QImage, QPixmap
Классы стилей
QApplication
Слайд 32

QApplication QCoreApplication, QGuiApplication Используется для : Получения событий клавиатуры, таймера, мыши

QApplication

QCoreApplication, QGuiApplication
Используется для :
Получения событий клавиатуры, таймера, мыши и др.
Обеспечивает правильное

завершение работы приложения при завершении работы ОС

Можно в нем:
Устанавливать стиль приложения
Получать указатель на объект рабочего стола
Управлять глобальными манипуляциями с мышью и регистрировать движения мыши в окне и за его пределами

Слайд 33

Дполнительные модули Qt QtWebEngineCore QtWebEngineWidgets Qt 3D QtBluetooth QtLocation QtSensors QtCharts QtDataVisualization QtVirtualKeyboard QtRemoteObjects

Дполнительные модули Qt

QtWebEngineCore
QtWebEngineWidgets
Qt 3D
QtBluetooth
QtLocation
QtSensors

QtCharts
QtDataVisualization
QtVirtualKeyboard
QtRemoteObjects

Слайд 34

Философия объектной модели QObject – основной базовый класс. Все классы, имеющие

Философия объектной модели

QObject – основной базовый класс. Все классы, имеющие сигналы

и слоты, должны быть от него унаследованы
Class Myclass : public QObject, public AnotherClass
{

};
Слайд 35

Философия объектной модели QObject содержит в себе поддержку: сигналов и слотов,

Философия объектной модели

QObject содержит в себе поддержку:
сигналов и слотов,
таймера,
Механизма объединения

объектов в иерархии
Событий и механизма фильтрации
Метаобъектной информации
Приведения типов
свойств
Слайд 36

Механизм сигналов и слотов Функции обратного вызова callback functions Механизм сигналов и слотов

Механизм сигналов и слотов

Функции обратного вызова
callback functions

Механизм сигналов и слотов

Слайд 37

Метаобъектный компилятор (MOC) Анализирует классы на наличие в их определении макроса

Метаобъектный компилятор (MOC)

Анализирует классы на наличие в их определении
макроса Q_OBJECT
и внедряет

в отдельный файл необходимую дополнительную информацию
Слайд 38

Преимущества механизма сигналов и слотов Каждый класс, унаследованный от QObject, может

Преимущества механизма сигналов и слотов

Каждый класс, унаследованный от QObject, может иметь

любое количество сигналов и слотов
Сообщения, посылаемые посредством сигналов, могут иметь множество аргументов любого типа
Сигнал можно соединять с любым количеством слотов. Отправляемый сигнал поступит ко всем соединенным слотам.
Соединение сигналов и слотов можно производить в любой точке приложения
При уничтожении объекта происходит автоматическое разъединение всех сигнально-слотовых связей
Связь через сигналы-слоты может выполняться для объектов из разных потоков
Слайд 39

Недостатки сигналов-слотов Сигналы и слоты не являются частью С++, перед компиляцией

Недостатки сигналов-слотов

Сигналы и слоты не являются частью С++, перед компиляцией программы

требуется запуск дополнительного компилятора
Отправка сигнала происходит медленнее, чем вызов функции при механизме обратного вызова
Существует необходимость наследования класса QObject
В процессе компиляции не производится никаких проверок: имеется ли сигнал или слот в соответствующих классах, совместимы ли они.
Слайд 40

Механизм сигналов и слотов У вас звонит телефон и вы нажимаете

Механизм сигналов и слотов

У вас звонит телефон и вы нажимаете

на кнопку для ответа
(или проводите по экрану )
Выслал отреагировал
на сигнал

Объект Телефон

Объект Человек

Сигнал Звонок

СЛОТ Нажатие кнопки

Слайд 41

Сигнал Это методы, которые могут выполнять пересылку сообщений Причина появления сигнала

Сигнал

Это методы, которые могут выполнять пересылку сообщений
Причина появления сигнала – изменение

состояния управляющего элемента
Присоединенный объект, получив сигнал, МОЖЕТ на него отреагировать.
Соединяемые объекты могут быть независимы !
Слайд 42

Сигнал Сигнал определяется в классе как метод, только без реализации Всю

Сигнал

Сигнал определяется в классе как метод, только без реализации
Всю работу по

реализации кода для такого метода берет на себя MOC
Методы сигналов ничего не возвращают и имеют тип void
Сигнал не обязан соединяться со слотом
Библиотека предоставляет большой набор уже готовых сигналов для существующих элементов управления
Слайд 43

Определение сигнала в своем классе class Mysignal { Q_OBJECT … signals: void doIt(); … };

Определение сигнала в своем классе

class Mysignal
{ Q_OBJECT

signals:
void

doIt();

};
Слайд 44

Определение сигнала в своем классе void MySignal:: doIt() { QMetaObject:: activate( this, &staticMetaObject, 0,0); }

Определение сигнала в своем классе

void MySignal:: doIt()
{
QMetaObject:: activate( this,

&staticMetaObject, 0,0);
}
Слайд 45

Реализация сигнала emit doIt(); class MySignal { Q_OBJECT public: void sendSignal

Реализация сигнала

emit doIt();
class MySignal
{ Q_OBJECT
public:
void sendSignal ()
{

emit doIt();}
signals:
void doIt();
};


class MySignal
{ Q_OBJECT
public:
void sendSignal()
{ emit doIt(«Hello»);}
signals:
void doIt(const QString);
};

Слайд 46

Слоты Это методы, которые присоединяются к сигналам Слоты определяются в классе

Слоты

Это методы, которые присоединяются к сигналам
Слоты определяются в классе как public,

private, protected
В объявлении группы слотов должно стоять
private slots, protected slots, public slots
В библиотеке есть целый ряд уже реализованных слотов
Слоты могут быть виртуальными
В слотах нельзя использовать параметры по умолчанию
Слоты нельзя определять как static
Слайд 47

Создание слота для своего класса class MySlot { Q_OBJECT public: MySlot();

Создание слота для своего класса

class MySlot
{ Q_OBJECT
public: MySlot();
public slots:

void slot()
{
qDebug () « I am a slot«;
}
};

void slot()
{
qDebug<< sender()→objectName();
}

Слайд 48

Соединение объектов QObject :: connect ( const QObject * sender, const

Соединение объектов

QObject :: connect ( const QObject * sender,

const char* signal,
const QObject* receiver,
const char* slot,
Qt:: ConnectionType type= Qt:: AutoConnection);
SIGNAL( method())
SLOT(method())
Слайд 49

Соединение объектов type: Qt:: DirectConnection Qt:: QueuedConnection Qt::AutoConnection

Соединение объектов

type:
Qt:: DirectConnection
Qt:: QueuedConnection
Qt::AutoConnection

Слайд 50

Соединение объектов QObject :: connect ( const QObject * sender, const

Соединение объектов

QObject :: connect ( const QObject * sender,

const QMetaMethod& signal,
const QObject* receiver,
const QMetaMethod& slot,
Qt:: ConnectionType type= Qt:: AutoConnection);
Слайд 51

Пример соединения объектов void main() { ….. QObject:: connect(pSender, SIGNAL( signalMethod()),

Пример соединения объектов

void main()
{
…..
QObject:: connect(pSender, SIGNAL( signalMethod()), pReceiver, SLOT(slotMethod()));
….
}
QObject:: connect(pSender,

&SenderClass:: signalMethod(), pReceiver, &ReceiverClass::slotMethod());
Слайд 52

MyClass :: MyClass ():QObject () { … connect(pSender, SIGNAL( signalMethod()), pReceiver, SLOT(slotMethod())); ... }

MyClass :: MyClass ():QObject ()
{

connect(pSender, SIGNAL( signalMethod()), pReceiver, SLOT(slotMethod()));

...
}
Слайд 53

MyClass :: MyClass ():QObject () { … connect(pSender, SIGNAL( signalMethod()), SLOT(slot()));

MyClass :: MyClass ():QObject ()
{

connect(pSender, SIGNAL( signalMethod()), SLOT(slot()));
...
}
void

MyClass:: slot()
{ qDebug() <<»I am a slot»; }
Слайд 54

Отслеживание ошибки соединения bool bOk =true; bOk &= connect(pcmd1, SIGNAL( clicked()), pobjReceiver1, SLOT( slotButtonClicked())); Q_ASSERT(bOk);

Отслеживание ошибки соединения

bool bOk =true;
bOk &= connect(pcmd1, SIGNAL( clicked()), pobjReceiver1, SLOT(

slotButtonClicked()));
Q_ASSERT(bOk);
Слайд 55

Передача сигнала без обработки MyClass :: MyClass ():QObject () { …

Передача сигнала без обработки

MyClass :: MyClass ():QObject ()
{

connect(pSender, SIGNAL(

signalMethod()), SIGNAL(mySignal()));
...
}