Signaalit ja paikat

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 17. maaliskuuta 2015 tarkistetusta versiosta . tarkastukset vaativat 12 muokkausta .

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.

Vaihtoehtoisia lähestymistapoja

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 .

Signaalit ja paikat Qt:ssä ( C++ )

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

Linkit