Archiv pro štítek: slot

Qt – propojování signálů a slotů

Tento článek bude sice laděn poněkud obecněji, stoprocentně však nabyté informace využijete. A nebo si snad dokážete představit komplexnější okenní program, který by fungoval bez vzájemného propojení signálů a slotů? Jakmile se ve vašem programu objeví jediné tlačítko, položka v menu či jiný libovolný prvek, vždy musíte určit, jaká činnost se po jeho aktivaci nebo stisknutí provede. Tuto specifikaci lze přitom provést několika rozdílnými způsoby.

Grafické propojení

Tuto formu sjednocení signálů a slotů zmíním jen okrajově, protože dle mého názoru dokáže spíše práci znesnadnit. Jedinou možnou výhodu vidím ve znázornění principu odesílání zpráv a jejich zachytávání. Začátečník tak celou ideu patrně lépe pochopí. Vyzkoušet si tuto variantu můžete v návrhářském režimu po stisknutí F4, kdy tažením myši určíte zdroj signálu a příslušný cíl. Záhy však pravděpodobně přijdete o přehlednost a snadnou editaci.

Grafické propojení

Signals & Slots Editor

Velmi sofistikovaný nástroj se skrývá rovněž v designérském módu pod příslušnou záložkou. Zeleným tlačítkem plus zahájíte vytvoření nového spojení. Na určitou nevýhodu však brzy narazíte. Pakliže například naprogramujete vlastní slot, neobjeví se v rozevíracím seznamu. Nejprve jej s pomocí funkce Change signals/slot musíte do příslušné části ručně vepsat. Když si však přesně nepamatujete identifikátor, nezbývá, než se přepnout do zdrojového kódu a dotyčný název vyhledat. Já osobně například chvílemi přemýšlím, zda-li jsem slot pojmenoval jako uloz, ulozit či snad Ulozit :-).

Editor signálů a slotů

Connect

Syntaxe určení závislosti mezi signálem a koncovým cílem zapsaná ve zdrojovém kódu patrně na první pohled nevypadá pro lidi začínající s Qt příliš lákavě. Nejde však o nic složitého a velmi záhy si na funkci connect dokážete zvyknout. Obvykle se stačí dobře seznámit s makry SIGNAL() a SLOT(). Editor vám navíc vždy ochotně napoví.

connect(ui->pb_barva,SIGNAL(clicked()),this,SLOT(barva()));