Qt-signalspor qstringlist

Qt-signalspor qstringlist h1>

Fa via App Store Les dette innlegget i var app!

Laster inn QStringList-verdi mottatt fra signalspor.

I min qt c ++-applikasjon sendes en QStringList fra en cpp-fil (MainWIndow) til en annen cpp-fil (Dialog) via signal og slots mekanisme! Jeg vil vise elementene i qtringListen pa en kombinasjonsboks i Dialog.ui nar grensesnittet blir lastet (ingen knappeklikk)!

Folgende er koden min.

QStringListen mottas vellykket gjennom sporet (allerede verifisert). Selv om jeg brukte en for-loop og provd visning (som i koden) ble ingenting vist pa kombinationsboks! Hvordan kan jeg fikse dette problemet?

For a fa en arbeidskode ma du plassere din for llop inne i din plass:

Hvis du vil fylle comboBox med innholdet i noen QStringList pa dialogkonstruksjon, bor du enten sende denne listen som konstruktorargument:

eller ring Dialog :: receiveSubMessages () rett etter Dialog objekt konstruksjon:

Koden du har oppgitt, vil aldri tillate deg a oppna det onskede resultatet fordi din forlop som skal fylles i QComboBox, utfores i dialogboksen. Pa det tidspunktet er delmottakene dine tomme. Sporet du har opprettet, blir ikke kalt for konstruktoren. Sporet er bare en medlemsfunksjon som bare kan ringes etter at objektet er opprettet. Du kan bare ringe en medlemsfunksjon uten et objekt hvis selve funksjonen er statisk, i sa fall er det definitivt ikke et spor.

Jeg gjorde dette svaret for a vise deg hvordan du loser problemet. (Jeg har folelsen av at jeg selv ikke forstod hva ditt egentlige problem er.)

Nar du stiller et sporsmal, oker sjansene for a fa et nyttig svar hvis en MCVE er gitt. (Vennligst folg denne lenken. Det l rer deg virkelig grunnleggende ferdigheter hver S / W-utvikler burde ha. Jeg vil ogsa anbefale a folge opp pa hvordan a feilsoke sma programmer.)

Da jeg forsto problemet ditt, laget jeg en slik MCVE. Dette er koden testQComboBox:

Jeg samlet det i VS2013 med Qt 5.9.2 pa Windows 10 (64 bit). Slik ser det ut:

Som du ser, er bruken av combobox ganske enkel & ndash; ingen hemmelige felle dorer a bruke den. Den faktiske koden som er direkte relatert til QComboBox er noyaktig 4 linjer med kode:

Og det er akkurat en linje med kode der elementer legges til QComboBox:

Jeg brukte QComboBox :: addItems () i stedet for QComboBox :: addItem () som den tidligere har allerede en sloyfe innebygd for a legge til en komplett QStringList. Det gjor ingen forskjell for sloyfen du brukte i koden Dialog :: Dialog ().

Sa endelig tor jeg gjore folgende uttalelse:

Hvis din kombinasjonsboksen ikke viser elementer, sa:

Du har lagt til elementer fra en tom liste.

Eller glemte du a legge til elementene fra listen.

Eller noe veldig merkelig skjer.

Jeg ville alltid satse pa 1. eller 2. grunn & ndash; Den tredje grunnen er bare for ekte nodstilfeller (for eksempel odelagt Qt-installasjon).

Om 3. grunn:

Jeg sa mange sporsmal der noen linjer med uskyldig utseende kode ble presentert som sa noyaktig som de burde, men ble hevdet a mislykkes. Og til slutt viste det seg at disse linjene fungerte bra da de var isolert i en MCVE, men de var ikke i den opprinnelige koden. Hvordan kan dette skje? Enten er det noen kontekst som endrer oppforselen til koden i ditt opprinnelige program eller det er UB & ndash; udefinert oppforsel. Noe annet gjor darlige ting, men i stedet for a krasje prosessen din umiddelbart (noe som vil bety at du er heldig) det gar for en stund a odelegge dataene mer og mer til slutt, til alt gar helt i stykker. A se pa kjernedumpen hjelper ikke i det hele tatt. Derfor min anbefaling om hvordan a feilsoke sma programmer.