Введение в разработку приложений на платформе Atom/MeeGo. Граничин О.Н - 49 стр.

UptoLike

49
Техника сигналов и слотов реализована следующим образом: сигнал вырабатывается, когда
происходит определенное событие, а слотэто функция, которая вызывается в ответ на
определенный сигнал. Каждый класс может объявлять сигналы, которые он будет отправлять и слоты,
которые можно ассоциировать с конкретными сигналами. При этом сигналы и слоты слабо связаны.
Класс, который вырабатывает сигнал не знает и не заботится о том, какие слоты его получат.
Сигналы и слоты могут иметь аргументы. Механизм сигналов и слотов Qt гарантирует, что если
мы подключим сигнал к слоту, слот будет вызван с параметрами сигнала в нужное время.
Система слотов и сигналов реализована как надстройка над синтаксисом С++. Исходный файл
обрабатывается метакомпилятором moc, который генерирует вспомогательные файлы. При этом
ограничения метакомпилятора накладывают определенные ограничения на классы, использующие
слоты и сигналы для взаимодействия. Так, например, такие классы не могут использовать механизм
шаблонов C++.
Рассмотрим небольшой пример использования механизма слотов и сигналов (см. Pис. 5.3.1).
Рис. 5.3.1.
Класс, наследуемый от QObject будет выглядеть следующим образом:
#include <QObject>
class Counter : public QObject
{
Q_OBJECT
public:
Counter() { m_value = 0; }
int value() const { return m_value; }
public slots:
void setValue(int value);
signals:
void valueChanged(int newValue);
private:
int m_value;
};
Класс, наследованный от QObject имеет то же самое внутреннее состояние и обеспечивает
публичные методы для доступа к этому состоянию, но дополнительно у него есть поддержка для
использования сигналов и слотов. Этот класс может сообщить внешнему миру что его состояние