Сигналы и слоты | это... Что такое Сигналы и слоты? (original) (raw)
Сигналы и слоты — это конструкция языка программирования, используемая в Qt, которая позволяет реализовать шаблон «наблюдатель», минимизируя написание повторяющегося кода. Концепция заключается в том, что компонент (часто виджет) может посылать сигналы, содержащие информацию о событии (например: был выделен текст «слово», была открыта вторая вкладка). В свою очередь другие компоненты могут принимать эти сигналы посредством специальных функций — слотов. Система сигналов и слотов хорошо подходит для описания Графического интерфейса пользователя. Также механизм сигналов/слотов может быть применён для асинхронного ввода/вывода (включая сокеты, pipe, устройства с последовательным интерфейсом, др.) или уведомления о событиях. В библиотеке Qt благодаря Метаобъектному компилятору отпадает необходимость писать код регистрации/отрегистрации/вызова, так как эти шаблонные участки кода генерируются автоматически.
Альтернативные подходы
Существуют реализации системы сигналов/слотов на основе шаблонов C++. Их преимущество в отсутствии необходимости использовать Метаобъектный компилятор, как это реализовано в Qt.
Примеры:
- libsigc++;
- sigslot;
- Signals;
- boost.signals;
- Cpp::Events;
- Platinum;
- JBroadcaster.
В языке программирования C# есть похожая конструкция с другой терминологией и синтаксисом: события играют роль сигналов, а делегаты — роль слотов. Другая реализация сигналов существует для ActionScript 3.0, основан на событиях из C# и сигналов/слотов из Qt. Дополнительно, делегатом может быть локальная переменная или указатель на функцию, в то время как в Qt слотом может быть только специально объявленный метод класса. Из-за ограничений языка, нет общей реализации для ANSI C. Но существует ограниченный вариант — c-sigslot.
Ссылки
- Signals and slots из официальной документации Qt.
- Signals and slots из документации к Boost.
Qt | |
---|---|
Технологии | Meta-object System · Phonon · QML · QtScript · Qt Quick · Qt Style Sheets · Сигналы и слоты |
Инструменты | qmake · Qt Creator · Метаобъектный компилятор |
Привязки | PyQt · PySide · QtRuby · Qt Jambi |
Связанные темы | KDE · MeeGo · Qt Development Frameworks |