Signaler og spor.

Signaler og spor.

Cascades-rammen bruker signaler og spor for a tillate objekter a kommunisere med hverandre. Dette systemet er basert pa signaler og sporlemekanismer som den underliggende Qt-utviklingsrammen bruker for inter-objektkommunikasjon.

Signalene og sporlemekanismen er hvordan Cascades handterer hendelseshandtering. I andre rammer kan du designe appen din for a lytte etter en bestemt hendelse som du er interessert i, for eksempel en beroringshendelse. Nar den hendelsen oppstar, behandler appen hendelsen og reagerer pa den. Cascades bruker en lignende tiln rming, men gir et ekstra lag (signaler og spor) pa toppen av det grunnleggende hendelsessystemet. Dette laget gjor det enklere og mer intuitivt a handtere ulike typer hendelser. Ideen om signaler og spor er forskjellig fra normale hendelseshandteringsmetoder, sa i denne dokumentasjonen vil du legge merke til at «signaler og spor» i stedet for «hendelseshandtering», brukes til a beskrive systemet.

I mange apper du lager, nar en endring forekommer i ett objekt, vil du varsle andre objekter av endringen. Meldingen har form av et signal. Et signal sendes ut av et objekt nar en type hendelse oppstar, for eksempel nar en egenskap av objektet endres. Andre objekter kan motta disse signalene ved a bruke spor. Et spor er en funksjon som kalles nar et objekt mottar et signal. Slots er medlemsfunksjoner i en klasse, og kan enten kalles direkte eller v re koblet til et signal. I Cascades er det mange forhandsdefinerte signaler som du kan koble til spor i appen din, men du kan ogsa lage dine egne signaler og spor hvis du trenger dem.

For eksempel inneholder knappkontrollen et forhandsdefinert signal som kalles klikket (), hvilket (som du forventer) blir sendt ut nar knappen klikkes. Du kan koble dette signalet til et annet objekt i appen din for a svare pa signalet nar det sendes ut. Skyvekontrollen inneholder et spor som heter resetValue (), som tilbakestiller verdien av skyveknappen til standardverdien. Du kan koble knappens klikkte () signal til glidebryterens resetValue () –spor slik at nar knappen klikkes, blir glidebryterens verdi nullstilt.

Utslipp av signaler fra objekter er separat og skiller seg fra tilkoblingen av signaler til spor signaler sendes fra objekter selv om det ikke er koblet spor til disse signalene. Dessuten er en signal-til-spor-tilkobling ikke nodvendigvis et en-til-en-forhold. Du kan koble mange signaler til ett spor, eller ett signal til mange spor. Du kan ogsa koble signaler til andre signaler, slik at nar et signal utloses, sendes det tilkoblede signalet ogsa.

For mer detaljert informasjon, se Signaler & amp; Slots pa Qt nettsted. Bruken av signaler og spor i Cascades ligner pa implementeringen i Qt. Det er noen forskjeller, og folgende avsnitt beskriver hvordan du bruker den spesifikke implementeringen i Cascades.

Bruke forhandsdefinerte signaler.

De fleste Cascades UI kontroller inkluderer forhandsdefinerte signaler som sendes ut nar noe interessant skjer med kontrollen. En knapp avgir et signal nar det klikkes, en skyveknapp sender et signal nar dets verdi endres, og et tekstomrade sender et signal nar teksten endres. Du kan svare pa disse signalene i enten QML eller C ++.

A svare pa forhandsdefinerte signaler i QML.

I QML har forhandsdefinerte signaler tilsvarende signalhandterere som automatisk opprettes for bruk. Navnene pa disse signalhandteringene er basert pa signalet de svarer til, og starter med prefikset «pa». For eksempel har det klikket () signalet for en knapp en onClicked signalhandterer. Legg merke til at kabinettet til signalnavnet endres slik at det samsvarer med det nederste kamelformatformatet (fra klikket til onClicked).

Innenfor signalhandtereren kan du bruke JavaScript til a definere hvordan kontrollen skal svare pa signalet. Du kan endre kontrollens eiendomsverdier, endre andre kontrollers eiendomsverdier, samtalefunksjoner og sa videre. Slik lager du en knapp som endrer teksten nar den klikkes:

Noen forhandsdefinerte signaler inkluderer parametere som du kan fa tilgang til og bruke i signalhandteringen. Disse parameterne gir ytterligere informasjon om endringen som skjedde. Du kan sjekke API-referansen for a avgjore om et signal gir parametere og hva de er.

Kontrollboksen kontrollerer for eksempel et kontrollertChanged () signal nar den valgte tilstanden endres (kontrollert eller fjernet). Dette signalet inkluderer en boolsk parameter, kontrollert, som inneholder den nye kontrollerte tilstanden i avmerkingsboksen. Slik lager du en avkrysningsboks som oppdaterer teksten til en tilgrensende etikett nar den kontrollerte tilstanden endres:

Bruk av forhandsdefinerte signaler og tilhorende signalhandteringsprogrammer er en enkel mate a gi enkle samspill pa i appene dine. Du kan svare pa signaler fra Kjerne UI-kontroller med minimal innsats og kode. Signalhandteringen er allerede gitt til deg, og alt du trenger a gjore er a fylle ut handlingene du vil ta.

Reagerer pa forhandsdefinerte signaler i C ++

I C ++ bruker du QObject :: connect () statisk funksjon for a koble et signal til et spor. Denne funksjonen er overbelastet for a godta noen forskjellige argumentkombinasjoner, men du ringer vanligvis funksjonen med folgende fire argumenter:

Et objekt som representerer signalets avsender Signalet til a sende Et objekt som representerer mottakeren av signalet Sporet for a motta signalet.

For eksempel, vurder en roykdetektor og sprinkleranlegg i ditt hjem eller kontor. Nar roykvarsleren detekterer royk, sender den et signal til sprinkleren for a indikere at sprinkleren skal begynne a dispensere vann for a sette ut en potensiell brann.

Du kan modellere denne oppforselen i Cascades ved hjelp av signaler og spor. Du kan ha et objekt som representerer roykdetektoren, og sender et signal nar det oppdager royk. Du kan ogsa ha et objekt som representerer sprinkleren, med et spor som avgir vannet.

Slik kan du koble roykvarslerens signal til sprinklerens spor:

Nar du spesifiserer signalet og sporet i forbindelse (), ma du bruke SIGNAL () og SLOT () makroene, henholdsvis. Disse makroene konverterer navnene til signalet og sporet som du vil koble til strengstavler som brukes av connect ().

Det er enkelt a forkaste signal eller spornavn nar du bruker tilkobling (), eller sette parenteser pa feil steder, sa det kan v re lurt a sjekke returverdien fra connect () for a forsikre deg om at det ikke er noen feil. Connect () -funksjonen returnerer en boolsk verdi som angir om tilkoblingen av signalet og sporet var vellykket. Du kan bruke Q_ASSERT () for a teste returverdien og generere en advarselsmelding hvis forbindelsen ikke lykkes.

Slik kontrollerer du returverdien fra kobling () og genererer en advarsel hvis noe har gatt galt med tilkoblingen:

I C ++ ma du v re eksplisitt nar du handterer signaler. Du kan ikke bruke signalbehandlerne for forhandsdefinerte signaler slik du kan i QML. I stedet for a handtere et forhandsdefinert signal som du er interessert i, har du to valg: du kan koble signalet til et eksisterende spor i en annen klasse, eller definere ditt eget spor for a handtere signalet og deretter koble signalet til sporet.

Nar du kobler et signal til et eksisterende spor i en annen klasse, sender du vanligvis litt informasjon direkte fra signalobjektet til sporobjektet. Denne informasjonen er bestatt ved hjelp av signalparametere. For eksempel har skyvekontrollen et signal som kalles immediateValueChanged () som sendes ut nar verdien av skyvekontrollen endres. Dette signalet inneholder en verdi parameter som inneholder den nye verdien av skyveknappen. Du kan koble dette signalet til setPreferredWidth () -sporet til en Container, og bruk parameteren for a endre beholderens bredde nar verdien av skyvekontrollen endres. Slik gjor du det:

For a bruke denne tiln rmingen til a sende informasjon mellom kontroller, ma signalet og sporet bruke samme type parametere. Du kan ikke koble et signal med en float-parameter til et spor som forventer en QString-parameter. Selv om typer parametere ma samsvare, trenger antall parametere ikke. Sporet kan ha samme antall parametere (eller f rre) som signalet det er koblet til. For eksempel kan du koble et signal med to parametere (en float og en bool) til et spor med bare en float parameter; den ekstra bool-parameteren fra signalet blir ignorert.

Koble til signaler til eksisterende spor fungerer bra for enkle tilkoblinger, men hva om signal- og sporparametrene ikke stemmer overens, eller du ma utfore en mer komplisert oppgave som svar pa signalet? I disse tilfellene kan du definere ditt eget spor for a handtere signalet.

Nar du lager et spor, oppretter du bare en medlemsfunksjon for den klassen du jobber med. For a la funksjonen fungere som et spor, plasserer du funksjonsdeklarasjonen i en offentlig plassering: delen i klassepostfilen:

Du kan da definere funksjonen i den tilsvarende kildefilen, og koble et signal til sporet ved hjelp av QObject :: connect (). Spillefunksjoner har nesten alltid en returtype tomrom. Du kan opprette et spor som returnerer en verdi eller et objekt, men signalene og sporingsmekanismen vil ikke tillate deg tilgang til denne returverdien.

I et av kodeprovene ovenfor ble QML brukt til a endre teksten til en etikett nar den tilhorende avmerkingsboksen endret sin tilstand. Slik oppnar du det samme resultatet ved a bruke et tilpasset spor i C ++:

Selv om du bruker C ++ til a lage dine egne spor, er det mer kode, det er ogsa mer fleksibelt. Du kan gjore mer komplekse oppgaver i slotsprosesser, og du kan bruke hele spekteret av C ++-funksjonalitet i stedet for a v re begrenset til JavaScript.

Skaper dine egne signaler.

Hvis de forhandsdefinerte signalene i Cascades ikke er tilstrekkelige for appen din, eller hvis du vil sende ut signaler fra egendefinerte objekter du lager, kan du lage dine egne signaler og koble dem til spor i enten QML eller C ++.

Opprette signaler i QML.

I QML lager du et tilpasset signal for en kontroll ved hjelp av sokeordet signal og gir noen parametere som signalet inkluderer nar det sendes ut:

I likhet med forhandsdefinerte signaler, skaper Cascades signalhandteringsprogrammer for tilpassede signaler automatisk. Det egendefinerte signalet mySignal () ovenfor har en signalhandterer som kalles onMySignal, og parameterv rdien og aktivert er tilgjengelig for bruk i signalhandtererens kropp.

For a sende et egendefinert signal, kaller du bare signalet pa samme mate som du kaller en vanlig funksjon. Slik lager du en knapp som, nar den klikkes, sender ut et egendefinert signal som kalles clickedWithText. Dette signalet inkluderer en strengparameter kalt currentText, som inneholder teksten til knappen:

I tillegg til a bruke signalhandteringen som Cascades skaper for deg, kan du opprette ditt eget spor og koble et tilpasset signal til det. Du definerer et spor som en JavaScript-funksjon, og koble signalet til det sporet. Slik lager du en knapp som, nar den klikkes, viser sin tekst i et tekstomrade:

Det er andre tiln rminger du kan bruke for a oppna dette resultatet. Du kan bestemme a lage din knapp og tekstomrade som separate QML-komponenter, og definer hver i sin egen .qml-fil. Hvis du vil ha mer informasjon om hvordan du oppretter egendefinerte komponenter, kan du se Egendefinerte QML-komponenter.

Opprette signaler i C ++

I C ++ kan du opprette et tilpasset signal ved a plassere erkl ringen i en signaler: seksjon i klassen header-filen. Du kan ogsa inkludere noen parametere som signalet inkluderer nar det sendes ut:

Som slots har signaler nesten alltid en returtype tomrom. Nar du vil sende et signal, bruker du sokeordet:

Du kan koble et tilpasset signal til et spor ved a bruke QObject :: connect (), pa samme mate som du kobler et forhandsdefinert signal til et spor:

Her er en mate a opprette det samme tilpassede signalet fra en av QML-kodeproven over, i C ++:

Som med den tilsvarende QML-koden, finnes det flere andre mater du kan oppna dette resultatet, for eksempel a lage egendefinerte komponenter for hver kontroll.

Tutorial: Signaler og spor.

Lag en morsom proveapp som bruker signaler og spor, basert pa begrepet trafikklys.

Start oppl ringen.

Beslektede ressurser.

Sist endret: 2015-05-07.

Har du sporsmal om a legge igjen en kommentar? Fa svar fra var Disqus FAQ.

Technologies.

Brukerstotte.

BlackBerry World.

Folg oss pa:

BBM kanaler.

Utviklerrelasjoner er pa BBM-kanaler! Bli med i samtalen ved a registrere deg for beta-programmet og skanne strekkoden til hoyre.

1. Last ned verktoyene.

For du begynner a utvikle, ma du ga til fanen Nedlastinger. Her finner du nedlastinger for BlackBerry 10 Native SDK, BlackBerry 10 Device Simulator, og noen andre nyttige verktoy.

2. Prov proveappene.

Na med en filterstyring, kan du soke etter prover etter navn eller funksjon ved hjelp av fanen Eksempelapplikasjoner.

Velg enten Core eller Cascades-radioknappene for a vise provene som er relevante for deg.

3. Utdann deg selv.

Dokumentasjonsfanen inneholder tonnevis av eksempler, oppl ringsprogrammer og beste praksis for a veilede deg langs veien mot a bygge en fantastisk app.

Du kan fa tilgang til all dokumentasjon du trenger i den venstre navigasjonen.

4. Begynn a utvikle.

Referansefanen er der du finner viktige opplysninger om hvordan du bruker APIene vare.

Du kan bruke venstre navigasjon til a velge hvordan du vil bla gjennom referansen: etter modul, etter emne eller alfabetisk. Hvis du har en ide om hva du leter etter, begynner du a skrive den i filterboksen.



Hilsen! Vil du spille i det mest heldige kasinoet? Vi fant det for deg. Klikk her nå!