Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Qt.docx
Скачиваний:
8
Добавлен:
15.09.2019
Размер:
52.86 Кб
Скачать

Qt — кросс-платформенный инструментарий разработки ПО на языке программированияC++.

Есть также «привязки» к другим языкам программирования: Python — PyQt,  PHP — PHP-Qt и другие.

Позволяет запускать написанное с его помощью ПО в большинстве современных операционных систем путём простой компиляции программы для каждой ОС без изменения исходного кода. Включает в себя все основные классы, которые могут потребоваться при разработке прикладного программного обеспечения, начиная от элементов графического интерфейса и заканчивая классами для работы с сетью, базами данных и XML. Qt является полностью объектно-ориентированным, легко расширяемым и поддерживающим технику компонентного программирования.

Отличительная особенность Qt от других библиотек — использование Meta Object Compiler (MOC) — предварительной системы обработки исходного кода.

MOC позволяет во много раз увеличить мощь библиотек, вводя такие понятия, как слоты и сигналы. Кроме того, это позволяет сделать код более лаконичным. Утилита MOC ищет в заголовочных файлах на C++ описания классов, содержащие макрос Q_OBJECT, и создаёт дополнительный исходный файл на C++, содержащий метаобъектный код.

Также существует возможность расширения привычной функциональности виджетов, связанной с размещением их на экране, отображением, перерисовкой при изменении размеров окна.

Иерархия объектов в Qt

 В Qt все построено на объектах, главным базовым классом является QObject. Все классы, имеющие сигналы и слоты в Qt унаследованы от него. При множественном наследовании, если в иерархии планируется наличие класса QObject, его имя должно стоять первым в списке базовых классов, иначе метаобъектный компилятор Qt moc (Meta object compiler) будет ругаться. 

QObject содержит в себе поддержку сигналов и слотов.

Если нужно что бы класс мог посылать сигналы и иметь слоты, в его объявлении должен находится макрос Q_OBJECT, после макроса не нужно ставить точку с запятой.

Его наличие сообщает MOC о том, что в тело класса нужно включить мета-информацию необходимую для функциональности сигналов и слотов.

Препроцессор MOC анализирует объявления классов содержащих макрос Q_OBJECT и добавляет в них нужную мета-информацию.

Механизм сигналов и слотов объектно ориентирован и является главным при программировании в Qt.

Мета-объектная информация

Каждый объект ,производный от класса QObject или от класса-потомка QObject, располагает структурой данных, называемой МЕТА-объектной информацией. Это класс QMetaObject. В этой информации хранятся данные о сигналах, слотах, включая указатели на них о самом классе и о наследовании. Получить доступ к этой информации можно по средствам метода QObject::metaObject()

Для получения информации о наследовании классов, существует метод inherits(const char*), который определен непосредственно в классе QObject и возвращает значение true, если класс объекта унаследован от указанного в этом методе класса, либо произведен от данного класса. В противном случае возвращается значение false.

Недостатки и преимущества использования сигналов и слотов

Механизм сигналов и слотов полностью замещает функции обратного вызова, при этом являясь очень гибкой и объектно-ориентированной моделью.

Сигналы и слоты позволяют соединить вместе не связанные друг с другом объекты. Использование механизма сигналов и слотов дает программисту следующие преимущества:

  1. каждый класс, унаследованный от QObject, может иметь любое количество сигналов и слотов

  2. сообщения, посылаемые посредствам сигналов могут иметь множество аргументов любого типа

  3. сигнал можно соединять с различным количеством слотов, при этом высылаемый сигнал поступит ко всем подсоединенным слотам

  4. слот может принимать сообщения от многих сигналов, принадлежащих разным объектам

  5. соединение сигналов и слотов можно производить в любой точке приложения

  6. сигналы и слоты являются механизмами, обеспечивающими связь между объектами; эта связь может выполняться между объектами, которые находятся в различных потоках

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

Недостатки, связанные с применением сигналов и слотов:

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

  2. отсылка сигналов происходит немного медленнее, чем обычный вызов функции, который производится при использовании механизма функций обратного вызова

  3. существует необходимость в наследовании класса QObject

  4. в процессе компиляции не происходит никаких проверок вида: имеется ли сигнал или слот в соответствующих классах или нет, совместимы ли сигнал и слот друг с другом и могут ли они быть соединены вместе; об ошибке можно будет узнать лишь тогда, когда приложение будет запущено, вся эта информация выводится в консоль

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]