Кіріспе

Сигналдар мен слоттар – Qt-де объектілер арасындағы байланыс үшін енгізілген тіл құрылымы, ол бақылаушы үлгісін жүзеге асыруды жеңілдетеді және артық кодтан сақтауға көмектеседі. Бұл тұжырымдама бойынша GUI виджеттері және басқа да объектілер оқиға туралы ақпаратты қамтитын сигналдарды жібере алады, ал оларды басқа объектілер слоттар деп аталатын арнайы мүше функцияларын пайдаланып қабылдайды. Бұл C/C++ функциялық көрсеткіштеріне ұқсас, бірақ сигналдар/слоттар жүйесі кері шақыру аргументтерінің түрінің дұрыстығын қамтамасыз етеді. Сигналдар/слоттар жүйесі графикалық пайдаланушы интерфейстерін жобалау тәсілімен үйлеседі. Сонымен қатар, сигналдар/слоттар жүйесі басқа да GUI емес қолданыстар үшін де пайдаланылуы мүмкін, мысалы, асинхронды I/O (сокеттер, құбырлар, тізбекті құрылғылар және т.б. кіретін), оқиға туралы хабарлау немесе белгілі бір уақыт өткен кезде орындалатын шараларды тиісті объектілердің мысалдарымен және әдістерімен немесе функцияларымен байланыстыру үшін. Оны пайдалану оңай, себебі тіркеу/тіркеуден шығару/шақыру кодын жазу қажет емес, өйткені Qt метаобъект компиляторы (MOC) қажетті инфрақұрылымды автоматты түрде жасайды. Электрондық кесте бағдарламаларының жаңарту жүйесі сигналдар мен слоттарды пайдаланып іске асырылуы мүмкін, яғни бір ұяшық өзгерген кезде оған тәуелді ұяшықтар хабарланады/жаңартылады.

Баламалы іске асырулар

C++ үлгілеріне негізделген сигнал/слот жүйелерінің бірнеше іске асырылуы бар, олар Qt қолданғандай қосымша метаобъект компиляторын қажет етпейді, мысалы libsigc++, sigslot, vdk сигналдары, нано сигналды слот, neosigslot, Signals, boost.signals2, Synapse, Cpp::Events, Platinum, JBroadcaster және KDBindings. C# сияқты Ортақ Тілдік Инфрақұрылым (CLI) тілдері де ұқсас құрылымды қолдайды, бірақ басқа терминологиямен және синтаксиспен: оқиғалар сигналдардың орнында, ал делегаттар слоттардың орнында тұрады. ActionScript 3.0 үшін де сигналдардың бір іске асырылуы бар, ол C# оқиғаларынан және Qt-тағы сигналдар/слоттардан шабыттанды. Бұдан өзге, делегат функция көрсеткіші сияқты жергілікті айнымалы бола алады, ал Qt-дағы слот міндетті түрде осылай жарияланған сынып мүшесі болуы керек. C-негізделген GObject жүйесі де GSignal арқылы ұқсас мүмкіндіктерді ұсынады. D тілінде бұл std.signals арқылы іске асырылады.

Кітапханалар

Java: sig4j көп жіпті, типтік қауіпсіздікке ие, Java 8-де ұсынылған FunctionalInterface аннотациясына негізделген. C++: vdk сигналдары жіптік қауіпсіздікке ие, типтік қауіпсіздікке ие, C++11-де атомдық айнымалыларды қолданып жазылған.