Codecall.

Codecall.

Qt: Part2 – Signal & # 38; Slot.

kjernekoder 08 jul 2012.

Dette er del 2 av en serie oppl ringsprogrammer om Qt. I & # 39; Part1 & # 39; vi snakket bare om hva Qt er og installerer det. I denne delen vet vi om Signal & amp; Slot i Qt. Jeg vil gjore mitt beste for a ordne & amp; forberede han oppl ringsprogrammer for helt nybegynnere til Qt.

Vi vet at det i en kommunikasjon er to parter – sender og mottaker. Signal er & ting; den avsenderen sender ut til a la andre mottaker (e) vite det, det er noe som skjedde eller noe tilstand endret i avsenderen og vite at mottakerne kan utfore & # 39; noe grunnlag for at signalering fra avsender. Som eksempel, og et vindu lukkes, kan det signalere at det kommer til a lukke seg selv & # 39; slik at det pa grunnlag av den signaleringen kan andre objekter i systemet gjore noe som er relatert / avhengig av det aktuelle vinduets eksistens.

Fra visningen av koden, vil & # 39; signalet & # 39; er bare en erkl ring om en metode under & # 39; -signalene & # 39; access-Specifier. Jeg gjentar bare en erkl ring; ingen definisjon. Og nar det er pa tide a heve / brenne signalet fra en linje med kode, bare ring den metoden fra det aktuelle punktet pa koden. Signalinntaket / opphoyden skiller seg fra vanlig metode som kalles i den forstand at vi trenger a sette et spesielt sokeord for den metoden ringer – det sokeordet er utgitt & # 39 ;. Som eksempel er her en signaldeklarasjon og heving / avfyring av signalet.

Slot er koden (faktisk en metode) som vil bli kalt nar det eller de spesielle signalene sendes ut. Dette er metoden i mottakerenden (i mottakerklassen). Sa et spor blir kalt nar signalene som er koblet til sporet, sendes ut. Et spor er en vanlig C ++-metode, og kan til og med kalles som en vanlig metode. Den eneste spesielle funksjonen er at disse spesielle metodene kan kobles til signaler. Slots kan v re under noen tilgangsspecifikke, men det spesifiserer skal merkes med spesielle sokeordspor \ “satser \”. Slots under en hvilken som helst tilgangsspesifikator kan kobles til et hvilket som helst signal. Adgangsspesifikatoren pavirker nar du prover a kalle det som en vanlig metode. Som eksempler defineres sporene i kode som:

Hvis du vil skrive signaler & amp; Slots i din egen klasse, ma du mote to forhold. Klassen din ma arve fra QObject-klassen eller en hvilken som helst klasse avledet fra QObject. Q_OBJECT-makroen ma vises i en privat del i klassen din. V r oppmerksom pa at vi motte disse to forholdene i overforings- og mottakerklassen ovenfor.

Koble til / binde signalet til sporet.

Vel, etter a ha deklarert / definert signaler og spor i avsender / mottakerklasse, ma vi koble til / binde signaler og spor til hverandre slik at nar signal utsender, blir slots kalt. Vi bruker koblingsmetoden til QObject-klassen til a gjore det. Vi trenger vanligvis for store argumenter for a tilveiebringe den metoden for a koble til / binde et signal til et spor — avsender: sender av signalsignalet: signalet fra avsenderobjektet som vi vil koble til mottaker: mottakerobjektet pa som sporet vil bli utfort nar signalet sender metode: sporet i mottakerobjektet som vil bli kalt med signalet sender ut avsenderobjektet. Sa kobler han folgende kode til foo-signalet til avsenderklassen for a b re spor av mottakerklassen. SIGNAL- og SLOT-makroen utarbeider en streng av metode som vi ma sende til QObject :: connect method.

La oss na lage et enkelt program som vil bruke signalet og sporet. Folg trinnene for a opprette et konsollprogram i Qt-Creator. Merk at jeg bruker QtCreator 2.2.1 med Qt Framework 4.7.4. Lunsj QtCreator og ga til “File – & gt; Ny fil eller prosjekt & # 39; Meny. & # 39; New & # 39; vinduet vil vises pa deg. I vinduet velger du & # 39; Annet prosjekt & # 39; fra venstre overste del og & # 39; Qt konsollprogram & # 39; fra hoyre del og klikk pa & # 39; Velg & # 39; knapp. & # 39; Qt Console Application & # 39; vinduet vil vises pa deg. Velg en sti og gi et navn til prosjektet vart. Som eksempel heter jeg det SignalSlotTesting. Klikk deretter pa & # 39; Neste & # 39; knapp. Pa neste side ma du velge & # 39; Target & # 39; enheter prosjektet ditt vil kjore / distribuere pa. Du kan velge flere hvis du vil. For dette eksemplet velg bare & # 39; Desktop & # 39; som mal. Og klikk pa & # 39; Neste & # 39; knapp. Pa neste side klikker du pa & # 39; Fullfor & # 39; knapp. Dette er vart prosjekt pa dette stadiet i QtCreator – La oss na legge til en klasse – Sender – i prosjektet. Folg trinnene nedenfor. Hoyreklikk pa prosjektnokkel & SignalSlotTesting & # 39; i prosjektutforskeren – & gt; Legg til ny. I & # 39; Ny fil & # 39; vindu, velg & # 39; C ++ & # 39; fra & # 39; Velg en mal & # 39; delen og & # 39; C ++ Class & # 39; fra hoyre del og klikk pa & # 39; Velg & # 39; knapp. & # 39; C ++ Class Wizard & # 39; vil v re pa deg: I denne veiviseren gi oss klassenavnet til Sender & # 39; skriv QObject som grunnklasse og arve type informasjon fra QObject-klassen. Og klikk pa & # 39; Neste & # 39; knapp. Pa neste side klikker du pa & # 39; Fullfor & # 39; knapp. La oss ogsa legge til en annen klasse – Mottaker – folger alle trinnene vi gjorde for Sender-klassen.

Kode i Sender.h / .cpp-fil.

Sa det vi gjorde i hovedsak er: Vi skapte forekomst av avsender og mottaker. Deretter koblet foo-signalet fra Sender-objektet til bar-sporet av mottakerobjektet. Og sa kaller vi den vanlige metoden fireSignal til avsender. Na sender avsenderobjektet foo-signalet i den metoden, og bar-sporet kalles i mottaker-metoden. Og dette er formalet med signal og spor.

mdminhazulhaque 23 nov 2012.

pinkerton 09 jul 2014.

Takk for det flotte skriveoppdraget. Jeg tilbrakte mesteparten av dagen med a fa min tilkobling () til a fungere. Jeg leste og leste og sa pa kodeeksempler, men ingen av dem gjorde det. Du skjedde a nevne at spaltfunksjonen matte bli oppfort under sokeordsporet. Bingo. Endte dagen med et smil. Takk for at du tok deg tid til a skrive opp denne artikkelen og gjore alt arbeidsformatering etc.


Vil du spille i det beste kasinoet? Vi fant det for deg. Trykk her nå!