- •Иерархия объектов в Qt
- •Мета-объектная информация
- •Недостатки и преимущества использования сигналов и слотов
- •Сигналы.
- •Соединение и разъединение объектов.
- •Общие методы управления последовательных контейнеров
- •Методы контейнера qVector
- •Методы контейнера qList:
- •Методы контейнера Qstack:
- •Методы контейнера qQueue:
- •Методы управления ассоциативными контейнерами:
- •Методы контейнера qMap:
- •Методы контейнера qHash:
- •Методы контейнера qSet:
- •Итераторы
- •Итераторы в стиле Java
- •Итераторы в стиле stl
- •Принцип работы с оператором foreach
- •Компоновка виджетов на форме.
- •Разделители
- •Области с прокруткой
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.
Недостатки и преимущества использования сигналов и слотов
Механизм сигналов и слотов полностью замещает функции обратного вызова, при этом являясь очень гибкой и объектно-ориентированной моделью.
Сигналы и слоты позволяют соединить вместе не связанные друг с другом объекты. Использование механизма сигналов и слотов дает программисту следующие преимущества:
каждый класс, унаследованный от QObject, может иметь любое количество сигналов и слотов
сообщения, посылаемые посредствам сигналов могут иметь множество аргументов любого типа
сигнал можно соединять с различным количеством слотов, при этом высылаемый сигнал поступит ко всем подсоединенным слотам
слот может принимать сообщения от многих сигналов, принадлежащих разным объектам
соединение сигналов и слотов можно производить в любой точке приложения
сигналы и слоты являются механизмами, обеспечивающими связь между объектами; эта связь может выполняться между объектами, которые находятся в различных потоках
при уничтожении объекта происходит автоматическое разъединение всех сигнально-слотовых связей; это гарантирует, что сигналы не будут высылаться к несуществующим объектам.
Недостатки, связанные с применением сигналов и слотов:
сигналы и слоты не являются частью языка С++, поэтому требуется запуск дополнительного процессора перед компиляцией программы
отсылка сигналов происходит немного медленнее, чем обычный вызов функции, который производится при использовании механизма функций обратного вызова
существует необходимость в наследовании класса QObject
в процессе компиляции не происходит никаких проверок вида: имеется ли сигнал или слот в соответствующих классах или нет, совместимы ли сигнал и слот друг с другом и могут ли они быть соединены вместе; об ошибке можно будет узнать лишь тогда, когда приложение будет запущено, вся эта информация выводится в консоль