- •Иерархия объектов в Qt
- •Мета-объектная информация
- •Недостатки и преимущества использования сигналов и слотов
- •Сигналы.
- •Соединение и разъединение объектов.
- •Общие методы управления последовательных контейнеров
- •Методы контейнера qVector
- •Методы контейнера qList:
- •Методы контейнера Qstack:
- •Методы контейнера qQueue:
- •Методы управления ассоциативными контейнерами:
- •Методы контейнера qMap:
- •Методы контейнера qHash:
- •Методы контейнера qSet:
- •Итераторы
- •Итераторы в стиле Java
- •Итераторы в стиле stl
- •Принцип работы с оператором foreach
- •Компоновка виджетов на форме.
- •Разделители
- •Области с прокруткой
Соединение и разъединение объектов.
Соединение объектов осуществляется при помощи статического метода connect(), который определен в классе Q_OBJECT. В общем виде вызов метода connect() выглядит следующим образом:
QObject:: connect(sender, signal, receiver, slot, type);
Данному методу передаются пять следующих параметров:
sender – указатель на объект, высылающий сигнал
signal – сигнал, с которым осуществляется соединение
receiver – указатель на объект, который имеет слот для обработки сигнала
slot – это слот, который вызывается при получении сигнала
type – управляет режимом обработки
Имеется три возможных значения type:
Qt::DirectConnection – сигнал обрабатывается сразу вызовом соответствующего метода слота
Qt::QueuedConnection – сигнал преобразуется в событие и ставится в общую очередь для обработки
Qt::AutoConnection – это автоматический режим, который действует следующим образом: если высылающий сигнал-объект находится в одном потоке с принимающим его объектом, то устанавливается режим QueuedConnection, в противном случае режим DirectConnection. Режим AutoConnection определен в методе connection() по умолчанию.
В случае, если слот содержится в классе, из которого производиться соединение, то можно воспользоваться сокращенной формой метода connect, не указывая при этом третий параметр, указывающий на объект-получатель.
Иногда возникает ситуация, когда объект не обрабатывает сигнал, а просто передает его дальше. Для этого не обязательно определять слот, который в ответ на получение сигнала, отсылает свой собственный сигнал. Можно просто соединить сигналы друг с другом, при этом высылаемый сигнал должен содержаться в определении класса.
Высылку сигналов можно заблокировать на некоторое время вызовом метода blockSignals() с параметром true. При этом объект будет молчать, пока блокировка не будет снята тем же методом blockSignals() с параметром false.
При помощи метода signalBlocked() можно узнать текущее состояние блокировки сигнала.
В Qt при уничтожении объекта все связанные с ним соединения уничтожаются автоматически, но иногда может возникнуть необходимость в уничтожении этих соединений вручную. Для этого существует статический метод disconnect(). Параметры данного метода аналогичны параметрам метода connect().
QObject::disconnect(sender, signal, receiver, slot);
Контейнерные классы (контейнеры) – это классы, которые в состоянии хранить в себе элементы различных типов данных.
Почти все контейнерные классы в Qt реализованы как шаблонные и таким образом они могут хранить данные любого типа. Основная идея шаблона состоит в создании родового класса, который определяется при создании объекта этого класса.
Qt представляет 2 категории разновидностей контейнеров:
последовательные (sequence containers)
ассоциативные (associative containers)
Последовательные контейнеры – это упорядоченные коллекции, где каждый элемент занимает определенную позицию. Данная позиция зависит от времени и места вставки. К последовательным контейнерам относятся вектор, список, стек и очередь.
QT содержит 5 классов этой категории:
QVector – вектор
QList – список
QLinkedList – двусвязный список
QStack – стек
QQueue – очередь