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

Соединение и разъединение объектов.

Соединение объектов осуществляется при помощи статического метода connect(), который определен в классе Q_OBJECT. В общем виде вызов метода connect() выглядит следующим образом:

QObject:: connect(sender, signal, receiver, slot, type);

Данному методу передаются пять следующих параметров:

  1. sender – указатель на объект, высылающий сигнал

  2. signal – сигнал, с которым осуществляется соединение

  3. receiver – указатель на объект, который имеет слот для обработки сигнала

  4. slot – это слот, который вызывается при получении сигнала

  5. 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 классов этой категории:

  1. QVector – вектор

  2. QList – список

  3. QLinkedList – двусвязный список

  4. QStack – стек

  5. QQueue – очередь

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