Сигналы и слоты - это языковая конструкция, представленная в Qt [1] для связи между объектами, которая упрощает реализацию шаблона наблюдателя , избегая при этом шаблонного кода . Идея состоит в том, что виджеты GUI могут отправлять сигналы, содержащие информацию о событиях, которые могут быть получены другими виджетами / элементами управления с помощью специальных функций, известных как слоты. Это похоже на указатели функций C / C ++, но система сигнал / слот обеспечивает правильность типа аргументов обратного вызова. [ необходима цитата ]
Система сигнал / слот хорошо сочетается с дизайном графических пользовательских интерфейсов . [ необходима цитата ] Аналогичным образом, система сигналов / слотов может использоваться для других применений, не связанных с графическим интерфейсом, например, для уведомления о событиях асинхронного ввода-вывода (включая сокеты, каналы, последовательные устройства и т. д.) или для связывания событий тайм-аута с соответствующими экземплярами объектов. и методы или функции. Он прост в использовании и не требует написания кода регистрации / отмены регистрации / вызова, потому что компилятор метаобъектов Qt (MOC) автоматически генерирует необходимую инфраструктуру.
Часто используемая метафора [ по мнению кого? ] представляет собой электронную таблицу. В электронной таблице есть ячейки, которые наблюдают за исходными ячейками. Когда исходная ячейка изменяется, зависимые ячейки обновляются из события.
Альтернативные реализации
Существуют некоторые реализации систем сигналов / слотов, основанных на шаблонах C ++ , которые не требуют дополнительного компилятора метаобъектов, используемых Qt, например libsigc ++ , sigslot , vdk-signal , nano-signal-slot , neosigslot , Signals , boost. .signals2 , Synapse , Cpp :: Events , Platinum и JBroadcaster . Языки Common Language Infrastructure (CLI), такие как C #, также поддерживают аналогичную конструкцию, хотя и с другой терминологией и синтаксисом: события играют роль сигналов, а делегаты - это слоты. Другая реализация сигналов существует для ActionScript 3.0 , вдохновленная событиями C # и сигналами / слотами в Qt. Кроме того, делегат может быть локальной переменной, очень похожей на указатель на функцию , а слот в Qt должен быть членом класса, объявленным как таковой. Система GObject на основе C также предоставляет аналогичные функции через GSignal . В D это реализовано с помощью std.signals .
Смотрите также
Библиотеки
Java: sig4j - многопоточный, типобезопасный, на основе аннотации FunctionalInterface, представленной в Java 8.
C ++: vdk-signal - потокобезопасный, типобезопасный, написанный на C ++ 11 с атомарными переменными.
Рекомендации
- ^ "Сигналы и слоты - QtCore 5.1" . Qt Project. 2013-07-04 . Проверено 4 июля 2013 . CS1 maint: обескураженный параметр ( ссылка )