Signaalit ja paikat on joissakin ohjelmointikielissä ja kirjastoissa (esimerkiksi Boost , gtkmm ja Qt ) käytetty lähestymistapa, jonka avulla voit toteuttaa "tarkkailija" -mallin , minimoiden toistuvan koodin kirjoittamisen. Konsepti on, että komponentti (usein widget) voi lähettää signaaleja, jotka sisältävät tietoa tapahtumasta (esimerkiksi: teksti "sana" valittiin, toinen välilehti avattiin). Muut komponentit puolestaan voivat vastaanottaa nämä signaalit erikoistoimintojen - korttipaikkojen kautta. Signaali - ja aikavälijärjestelmä soveltuu hyvin kuvaamaan graafista käyttöliittymää . Signaali/paikkamekanismia voidaan käyttää myös asynkronisiin I/O-tuloihin (mukaan lukien pistorasiat , putket, sarjalaitteet jne.) tai tapahtumailmoituksiin.
Signaali/paikkajärjestelmästä on toteutuksia C++-malleihin perustuen . Niillä on se etu, että niiden ei tarvitse käyttää Qt :ssä toteutettua Meta Object Compileria . Qt-kirjastossa Meta-Object Compilerin ansiosta ei tarvitse kirjoittaa rekisteröinti-/poisto-/soittokoodia, koska nämä vakiokoodiosat luodaan automaattisesti.
Esimerkkejä:
C#-ohjelmointikielellä on samanlainen rakenne, jossa on erilainen terminologia ja syntaksi: tapahtumat näyttelevät signaaleja, kun taas edustajat näyttelevät lähtökohtia. Toinen signaalien toteutus on olemassa ActionScript 3.0 :lle , joka perustuu C#:n tapahtumiin ja Qt:n signaaleihin/sloteihin. Lisäksi delegaatti voi olla paikallinen muuttuja tai funktioosoitin, kun taas Qt:ssä vain erityisesti ilmoitettu luokkametodi voi olla paikka. Kielirajoitusten vuoksi ANSI C:lle ei ole yhteistä toteutusta. Mutta on olemassa rajoitettu versio - c-sigslot .
Voit luoda signaalin luokassa seuraavasti:
luokka A : julkinen QObject { Q_OBJECT julkinen : A (); signaalit : mitätöi jonkin signaalin (); /* ... */ };Paikka voidaan luoda seuraavasti:
luokka B : julkinen QObject { Q_OBJECT julkinen : B (); julkiset slotit : void someSlot (); /*...*/ };Signaalin ja paikan yhdistäminen:
A luokka A (); luokka B ( ); QObject :: connect ( & classA , SIGNAL ( someSignal ( int )), & classB , SLOT ( someSlot ( int )));Qt | |
---|---|
Tekniikka | |
Työkalut | |
Sidokset | |
liittyvät aiheet |