Створення сигналів (signals) та слотів (slots)

Для того що об'єкт мав змогу приймати участь у сигнально-слотовій взаємодії необхідно виконати кілька умов. Клас екземплром якого є об'єкт, має успадповувати від класу QObject (у випадку множинного наслідування, QObject має стояти першим у списку класів).

Також необхідно додати до опису класу (перед описом будь яких інших членів класу, у секції private) макрос Q_OBJECT, який буде оброблений метаоб'єктним компілятором moc (програма, яка виконує попередню обробку тексту програми під час запуску qmake та генерує додатковий код для реалізації можливостей, які надає Qt). Далі у описі класу можна вказати власне сигнали та слоти. Сигнали описуються у розділі signals, а слоти у розділі slots, де перед назвою розділу стоїть спеціифікатор доступу (public, private або protected).

Створення власних сигналів

Створення власних слотів

Слоти є звичайними методами класу, які мають реалізацію та можуть приймати параметри та повертати значення. Специфікатор доступу стосується лише випадків використання слота як звичайного метода, але не сигнально слотових з'єднань (при отриманні сигналу, слот буде викликаний незалежно від специфікатора). Також значення, яке повертає слот ігнорується при сигнально-слотовому з'єднанні. Сигнали, на відміну від слотів, не мають реалізації. Їх реалізація забезпечується метаоб'єктною системою Qt. Сигнали є “захищеними” (protected) методами – їх можна посилати з класів, які успадковують від класу, що містить сигнал. Сигнально-слотові з'єднання можуть відбуватися як між об'єктами, так і всередині самого об'єкту, коли той самий об'єкт є одночасно і відправником сигналу, і отримувачем.

Last updated