На этом шаге рассмотрим определение слота.
Слоты (slots) — это методы, которые присоединяются к сигналам. По сути, они являются обычными методами. Самое большое их отличие состоит в возможности принимать сигналы. Как и обычные методы, они определяются в классе как public, private или protected. Соответственно, перед каждой группой слотов должно стоять: private slots:, protected slots: или public slots:. Слоты могут быть и виртуальными.
Есть ограничения, отличающие обычные методы от слотов. В слотах нельзя использовать параметры по умолчанию, например slotMethod(int n = 8), или определять слоты как static.
Классы библиотеки содержат целый ряд уже реализованных слотов. Но определение слотов для своих классов — это частая процедура.
Реализация слота показана ниже
class MySlot : public QObject { Q_OBJECT public: MySlot(); public slots: void slot() { qDebug() << "Я слот"; } };
Внутри слота вызовом метода sender() можно узнать, от какого объекта был выслан сигнал. Он возвращает указатель на объект типа QObject. Например, в этом случае на консоль будет выведено имя объекта, выславшего сигнал:
void slot() { qDebug() << sender()-> objectName(); }
На следующем шаге рассмотрим метод connect() для соединения объектов.