====== 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 ); } );