fy">};
Сигнал спрацьовує в тому момент, коли відбувається певна подія. Слот - це функція, яка викликається у відповідь на певний сигнал. Віджети Qt мають велику кількість зумовлених сигналів і слотів, при цьому розробник завжди можемо створити власні сигнали і слоти в своїх класах.
Наприклад, власний сигнал може бути визначений таким чином:
class MyClass: public QObject {_OBJECT:
/ / ...
signals:
void mySignal ();
};
Для того щоб ініціювати сигнал (вислати сигнал) потрібно використовувати ключове слово emit.
void MyClass :: sendMySignal ()
{mySignal ();
}
Також, сигнали можуть використовувати параметри для передачі додаткової інформації.
Для з'єднання сигналів і слотів можна використовувати статичний метод connect, визначений у класі QObject. У загальному вигляді з'єднання виглядає наступним чином:
connect (sender, SIGNAL (signal), receiver, SLOT (slot));
і receiver - це покажчики на QObject, signal і slot - сигнатури сигналу і слота.
Приклад з'єднання:
QObject :: connect (spinBox, SIGNAL (valueChanged (int)), slider, SLOT (setValue (int)));
У наведеному вище прикладі, сигнал, що виникає при кожній зміні об'єкта spinbox, зв'язується з відповідним слотом об'єкта slider. Виклик слота slider.setValue (int) відбувається автоматично при кожному виникненні сигналу spinBox.valueChanged (int).
Існує безліч різних варіантів з'єднання сигналів і слотів.
Один сигнал може бути з'єднаний з багатьма слотами:
connect (slider, SIGNAL (valueChanged (int)), spinBox, SLOT (setValue (int))); (slider, SIGNAL (valueChanged (int)), this, SLOT (updateStatusBar Indicator (int )));
При виникненні сигналу, слоти викликаються один за іншим, порядок не визначений.
Безліч сигналів можуть бути з'єднані з єдиним слотом:
connect (sender0, SIGNAL (overflow ()), receiver1, SLOT (handleMath Error ())); (sender1, SIGNAL (divisionByZero ()), receiver1, SLOT (handleMath Error ())) ;
Сигнали можуть бути з'єднані між собою:
connect (sender1, SIGNAL (function1 ()), receiver, SIGNAL (function2 ()));
При виникненні першого сигналу, автоматично генеруються всі пов'язані сигнали. Крім цього, з'єднання сигнал-сигнал неотличимо від з'єднання сигнал-слот.
Будь-який елемент графічного інтерфейсу в Qt може бути окремим вікном. Розробка інших модулів додатка здійснюється аналогічним чином. Для них в якості контейнерів були використані власні класи-спадкоємці qt-класів QWidget і QDialog.
Клас QWidget є базовим для всіх об'єктів для користувача інтерфейсу.
Віджет - це елементарний об'єкт користувальницького інтерфейсу: він отримує події миші, клавіатури та інші події від віконної системи і малює своє зображе...