====== 10. Qt - komunikace komponent ======
V rámci frameworku QT spolu komponenty komunikují pomocí ''signálů'' a ''slotů''. Signály jsou emitovány komponentami (např. při interakci s jejdnotlivých komponent s myší), sloty jsou metody tříd, které ošetřují reakce komponenty na signály. V první fázi seznamování s QT si vystačíme se signály, které mají komponenty vestavěné (typicky to bude signál [[https://doc.qt.io/qt-5/qabstractbutton.html#clicked|clicked]] třídy [[https://doc.qt.io/qt-5/qpushbutton.html|QPushButton]]), zatímco sloty budeme vytvářet vlastní. Celá problematika je celkem podrobně popsána na dedikované [[https://doc.qt.io/qt-5/signalsandslots.html|stránce]].
Deklarace slotu třídy je podobná deklaraci metody s tím, že je specifikace viditelnosti rozšířena o klíčové slovo ''slot''
class Object
{
Q_OBJECT
// ...
public slots:
clickHandler ();
};
Aby spolu mohly komponenty derivované z bázové třídy QObject komunikovat, je třeba je propojit. K tomu je možné využít hned několik způsobů
**1.** QT4 (stále funkční), používá makra ''SIGNAL'' a ''SLOT'', které převedou své argumenty na textový literál ((https://stackoverflow.com/questions/5880763/qt-signal-slot-macro-declaration))
connect (
sender, SIGNAL (valueChanged (QString, QString)),
receiver, SLOT (updateValue (QString))
);
**2.** QT5
connect (
sender, &Sender::valueChanged,
receiver, &Receiver::updateValue
);
**3.** >QT5 pomocí lambda funkcí
connect(
sender, &Sender::valueChanged,
[=]( const QString &newValue ) { receiver->updateValue( "senderValue", newValue ); }
);