Qt Forum.

Pass to argumenter til et spor.

Hei damer og herrer

Jeg hadde en QComboBox og den er koblet til et spor.

Inne i sporet far jeg indeksen, men jeg ma passere et sekund paramenter nar indeksendring.

Jeg vet hvem koden ovenfor er feil.

Finnes det en mate a sende et andre argument til dette sporet?

Takk pa forhand!

Nei, ikke direkte. Du kan opprette et spor som er kompatibelt med det nav rendeIndexChanged (int) signalet som enten kan sende et nytt signal, eller ring comboBoxCourseLoadValues (int, int) direkte.

Selv om vi aksepterer, som det grunnleggende prinsippet om ekte demokrati, er den ene moronen lik ett geni, er det nodvendig a ga et skritt videre og hold fast at to moroner er bedre enn ett geni?

Hei, kan du vise meg et eksempel?

Lag et spor med samme antall parametere for signalet. Utsende et signal inne i dette sporet som passerer indeksen og en annen ting.

Hvordan kan jeg ringe comboBoxCourseLoadValues (int, int) direkte?

Jeg trenger a sende den nav rende indeksen for combobox nar den er endring og en annen parameter.

Beste hilsener.

Slots er vanlige funksjoner, slik at du kan ringe dem som sadan. For eksempel:

Selv om vi aksepterer, som det grunnleggende prinsippet om ekte demokrati, er den ene moronen lik ett geni, er det nodvendig a ga et skritt videre og hold fast at to moroner er bedre enn ett geni?

Hvorfor bruker du ikke en vektor i stedet?

Hvis kompilatoren din stottet c + + 11 og Qt5 senere, sa:

koble til (comboBox, static_cast & lt; void (QComboBox :: *) (int)> (&; QComboBox :: currentIndexChanged),

[& amp;] (int indeks) & # 123; comboBoxCourseLoadValues (indeks, yourDefinedSecondParameter); & # 125;);

Det gir meg en kompilasjonsfeil;

‘QComboBox :: currentIndexChanged’: kan ikke fa tilgang til beskyttet medlem som er oppgitt i klassen ‘QComboBox’

Kan du forklare meg litt?

Takk for at du klargjorde.

Men jeg vet ikke hvordan jeg kan fa «additionalParameter» i handtakComboIndex () uten bruk er det i klassekonstruksjon.

Denne parameterverdien er oppnadd i kjoretid.

Jeg bruker QT 4.8 versjon.

Beste hilsener!

Du kan bruke annen mate a erkl re SIGNAL & amp; SLOT kombinasjon med.

og sa kan du bruke sa mange parametere som du vil ha for comboBoxCourseLoadValues.

Jeg prover dette, men sporet blir aldri kalt: /

Takk for at du klargjorde.

Men jeg vet ikke hvordan jeg kan fa «additionalParameter» i handtakComboIndex () uten bruk er det i klassekonstruksjon.

Denne parameterverdien er oppnadd i kjoretid.

Jeg bruker QT 4.8 versjon.

Beste hilsener!

som forklart ovenfor av @kshegunov, er det ingen direkte mate a koble til med enkeltargument-signal til et dobbeltargumentspor. Problemet kan v re hvordan SW skal bestemme hva de andre argumentene er.

Det er mer utforlige mater a handtere, men jeg synes det er mye enklere for deg pa det tidspunktet a legge til en annen sporrutine med bare ett argument. Dette kan v re koblet til comboboxen. Innenfor dette enkle argumentspillet kaller du bare ditt dobbelargumentspor. Du kan bruke hvilket som helst spor som en medlemsfunksjon, fordi det ganske enkelt er.

Stem pa svaret (e) som hjalp deg med a lose problemet ditt

Jeg prover dette, men sporet blir aldri kalt: /

Fordi du fortsatt bruker Qt 4.8. Etter min kunnskap er det lagt til Qt 5.3 eller hoyere.

Stem pa svaret (e) som hjalp deg med a lose problemet ditt

Hvordan kan jeg passere parameteren innvendig til den andre sporet?

ekstraparameter er oppnadd i en annen metode.

Sa jeg vil bruke den andre parameteren i sporet.

I utgangspunktet den forste muligheten. Som beskrevet er en sporingsrutine i utgangspunktet en utvidet medlemsfunksjon, og du kan fortsatt bruke den som medlemsfunksjon.

Du kan handtere det ogsa via et signal (du sender ut det) pluss en ekstra tilkobling til det nye sporet, men det virker akkord her.

Hvor skal parameteren din komme fra?

Din kombinasjonsboksen vet heller ikke. Hvis du vet det utenfor hvor som helst, ma du sende den til objektet pa forhand. signal-slots gjor noe «magisk», men krystallkule lesing er ikke en del av det;)

Stem pa svaret (e) som hjalp deg med a lose problemet ditt

Som sagt var den enkleste maten a bruke en vektor, men husk det er ikke en direkte losning.

Forst ma du sende currentIndexChanged (int) til et spor som aksepterer (int) sa godt, slik:

Men spilleautomaten er i stand til a huske verdien av det sendte signalet til det mottar et nytt anrop.

Sa snart sporet mottar to INTs (det du leter etter) kan du gjore hva du vil med det eller sende et annet signal derfra til et annet spor som aksepterer (int, int).

Her er koden:

Jeg fant ikke klassens definisjon for DialogClass ovenfor. Det kan imidlertid se ut som:

Hva hindrer deg til a legge til den andre gruppen?

Stem pa svaret (e) som hjalp deg med a lose problemet ditt

Ohh Takk for denne forklaringen, men i dette tilfellet trenger jeg en parameter av en annen type:

Men jeg liker din forklaring, jeg l rte for mye om signaler.

@mrjj gir meg en losning med pekere i et annet emne:

Men det du sier er veldig nyttig.

Hvorfor koden nedenfor er i klassedepartementet? Nar det kalles? Hvordan kan jeg l re mer om det?

Hvorfor koden nedenfor er i klassedepartementet? Nar det kalles? Hvordan kan jeg l re mer om det?

void setSecondArray (const QVector & lt; QString & gt; array)

Det er i utgangspunktet inline-kode. Som du kanskje har nevnt, er arrayet i min definisjon i den private delen. Derfor er det noe sikret, fordi det ikke er lett tilgjengelig. Med inline-definisjonen blir kodeseksjonen introdusert direkte hvor du bruker. Det sparer overhead for a ringe en medlemsfunksjon.

Den har opp og nedturer og bor bare brukes til korte kodesnitt. Her er en lenke til en artikkel.

Jeg syntes a huske at du noterte en frist. Derfor «kis» = «holde det enkelt».

Jeg sa pa @mrjj-koden du koblet til. Sa vidt jeg sa, kan du ikke bruke den. Du ser ut til a bruke de opprinnelige signalene til QComboBox, og det gir deg en indeks for gjeldende linje. For a fa ut av int-indeksen, vil et komplett utvalg med annen informasjon v re magisk.

Stem pa svaret (e) som hjalp deg med a lose problemet ditt

Jeg er litt treg til a svare i disse dager, og har lite a bidra til @ koahnigs utmerkede poeng. Jeg vil gi rad til @ Nouriemms forslag, men bare pa grunn av unodvendig bruk av statiske variabler. Mens her er det ikke et slikt problem (siden GUI-objekter ikke reentrant likevel), i mange tilfeller ved hjelp av statiske variabler som dette:

kan fa deg mye hodepine. spesielt nar bestilling av konstruksjon / odeleggelse er viktig.

Selv om vi aksepterer, som det grunnleggende prinsippet om ekte demokrati, er den ene moronen lik ett geni, er det nodvendig a ga et skritt videre og hold fast at to moroner er bedre enn ett geni?

Jeg kunne l re litt av QT og C ++ gjennom tips og rad.

Jeg haper en dag bidra til forumet ogsa.

Takk for hjelpen alle!

Jeg vet at statiske variabler er veldig redd for de aller fleste programmerere.

Men i mitt tilfelle er det ikke sa ille som det ser ut og jeg tror ikke det gjor noen problemer i dette tilfellet igjen.

Pluss alt jeg provde a gjore var a demonstrere losningen min i et lite stykke kode, som selvfolgelig kan implementeres pa hundrevis av andre mater, og dette er den delen jeg kaller det, er programmeringen.

Jeg haper du ikke tar det personlig, jeg provde absolutt ikke a underminere innsatsen din. Som du kan se har jeg bemerket at i dette tilfellet din foreslatte losning er sa god som noen, jeg pekte bare pa potensielle fallgruver som kunne oppsta i flere involverte tilfeller. Mens statiske variabler ikke pa noen mate er fryktelige, er det en god praksis a unnga dem hvis det er mulig, og ikke fordi du er redd eller ikke vet hvordan du skal handtere dem, men pa grunn av deres ubehagelige bivirkninger som man alltid bor holde sinn. Ugjennomtrengelige pekere er ogsa brukbare, men jeg gjetter at du ikke overforer objekter dine gjennom tomrommet * bare fordi du kan, er du?

Statikk, globals og singletons (som egentlig er det samme) har den ekle bivirkningen av a fremme gjensidig avhengighet mellom komponenter, og du ma ta spesielle tiltak nar rekkefolge av konstruksjon / odeleggelse er viktig. Pa toppen av det er de, fordi det er deres natur, bryter med reentrancy, og du ma ta spesielle skritt for a jobbe rundt. Tenk pa folgende veldig enkle eksempel:

Na er sporsmalet, kan du garantere at en vil bli initialisert for b, sa nar konstruktoren i klasse B kjorer, far du en gyldig referanse?

Selv om vi aksepterer, som det grunnleggende prinsippet om ekte demokrati, er den ene moronen lik ett geni, er det nodvendig a ga et skritt videre og hold fast at to moroner er bedre enn ett geni?

Forst gjor jeg klart at jeg ikke er advokat for statiske variabler. rlig, jeg prover a unnga dem sa mye som mulig. Alt jeg provde a gjore igjen var a demonstrere en losning som ikke var et absolutt svar. Etter min mening er den beste maten a demonstrere en variabel som holder sin tilstand, en statisk variabel.

En ting til tross for meg, er det ikke personlig. Det er en stor forskjell mellom den statiske variabelen i det givne eksemplet av deg og min statiske variabel. Din statiske variabel har ekstern kobling, men min statiske variabel har intern kobling innenfor sitt omfang.

Den eneste og eneste begrensningen jeg aksepterer for losningen min, er serialisert tilgang (mutex) av funksjonen som holder den statiske variabelen i multi-threading (som i dette tilfellet ikke er en biggie, er det?).

Ser ut som din forbindelse til Qt Forum var tapt, vent mens vi forsoker a koble til igjen.