Сигналы и слоты в Qt
Введение
Обработчики событий
Обработка сигналов при помощи слотов
Связывание нескольких сигналов с одним слотом и наоборот
Передача данных через сигналы
Пользовательские сигналы
Итог
160.14K

презаqt

1. Сигналы и слоты в Qt

Выполнили студенты 2 курса группы ПМИ-241, Дандерфер М. И.,
Дробот М.А.

2. Введение

Сигналы и слоты — это центральный механизм Qt для связи между
объектами (виджетами, потоками, данными). Он заменяет
классические коллбэки и обеспечивает:
• Гибкость: объекты ничего не знают друг о друге
• Типобезопасность: проверка типов во время компиляции
• Удобство: декларативное связывание через connect()

3. Обработчики событий

Это базовый способ реакции на действия пользователя (клик,
нажатие клавиши) или системные события (таймер, закрытие
окна).
• Слот on_pushButton_clicke
d() автоматически связывается с
кнопкой, если имя соответствует
соглашению on_<объект>_<си
гнал>().
• Это частный
случай использования слотов,
автоматически генерируемый Qt
Designer.

4. Обработка сигналов при помощи слотов

Основной механизм:
• Сигнал (Signal) — это сообщение, которое испускает объект при
наступлении некоторого события (например, clicked()).
• Слот (Slot) — это функция-член класса, которая может быть
вызвана в ответ на определённый сигнал.

5. Связывание нескольких сигналов с одним слотом и наоборот

Несколько сигналов → один слот:
• Полезно, когда одно действие
должно выполняться по разным
причинам.
Один сигнал → несколько слотов:
• Сигнал может запускать несколько
различных действий.

6. Передача данных через сигналы

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

7. Пользовательские сигналы

Вы можете создавать свои собственные
сигналы в классах, наследующих
от QObject.
Требования:
• Класс должен иметь макрос Q_OBJECT
• Сигналы объявляются в
разделе signals:
• Сигналы не реализуются (не имеют тела
функции)
• Испускаются с помощью ключевого
слова emit

8. Итог

Ключевые моменты:
• Сигналы и слоты — основа event-driven архитектуры в Qt.
• Связь устанавливается через connect(), может быть гибкой
(один-ко-многим, многие-к-одному).
• Через сигналы удобно и безопасно передавать данные.
• Механизм расширяем: вы можете создавать собственные сигналы
и слоты.
• Современный синтаксис connect предпочтительнее из-за
проверки типов на этапе компиляции
English     Русский Правила