Qlist-spor

Denne artikkelen viser hvordan du lager en kontrollabel liste i Qt. Programmet fremhever samtidig de merkede elementene og lagrer de merkede elementene i en fil.

To varianter av losningen presenteres:

Variant 1 – En enklere losning som bruker QListWidget. Variant 2 – en mer kompleks losning som bruker QListView og en underklasse QStringListModel. Denne losningen er mer egnet for problemer som krever ekstra evner (annet enn a sjekke og fjerne merkingen). Denne tiln rmingen krever at vi tilsidesetter metoder flagg (), data () og setData ().

Variant 1 – QListWidget.

Denne varianten av implementeringen bruker QListWidget for a oppna onsket funksjonalitet. Overskriften customdialog.h kan ses nedenfor. Den sjekkliste er representert av QListWidget. For a gjore elementene sjekke, ma vi legge til et flagg Qt :: ItemIsUserCheckable. Nar vi sjekker et element, utloser vi ogsa en slotspakkeChecked () som fremhever de merkede elementene i gul.

I konstruktoren initialiserer vi alle widgets, fyller listemodulen med data, lager de nodvendige layoutene og forbindelsene.

Metoden createListWidget () kan ses nedenfor. Vi fyller opp liste-widgeten med metoden addItems (QStringList). Nar elementene er opprettet, aktiverer vi / fjerner merkingen av elementene med flagget Qt :: ItemIsUserCheckable. Dette flagget er alt som er nodvendig for a gjore elementer kontrollerbare. Vi stiller ogsa standardstatusen til elementene til Qt :: Unchecked.

I metoden createConnections () etablerer vi alle nodvendige tilkoblinger. Spesielt for a aktivere utheving av elementene ved kontroll, kobler vi signalelementet Hanged (QListWidgetItem *) til QListWidget til sporet highlightCheck (QListWidgetItem *).

Sporet highlightChecket (QListWidgetItem *) kan ses nedenfor. Metoden gjor bakgrunnen for de merkede elementene lysegul, og bakgrunnen for ukontrollerte elementer forblir hvit.

Dette er alt som er nodvendig for a implementere kontroll og utheving av elementer med QListWidget. Hele implementeringen finner du i kildefilene ovenfor (Variant 1).

Variant 2 – QListView og subclassed QStringListModel.

I motsetning til den tidligere implementeringen, bruker denne implementeringen QListView og underklasser QStringListModel. Nedenfor er overskriften customdialog.h, som lagrer en peker til en forekomst av QListView og en tilpasset modelleksempel CustonListModel.

I konstruktoren til CustomDialog installerer vi QListView og CustomListModel (detaljer om implementeringsfolge) og vi fyller listemodellen med data.

Subclassing QStringListModel.

For a gjore elementer kontrollerbare, subclasserer vi QStringListModel. Vi presenterer en container som vil lagre de merkede elementene, nemlig QSet & lt; QPersistentModelIndex & gt; checkedItems og overstyre metodedataene (), setData () og flaggene ().

Merk: For a lagre de merkede elementene bruker vi QPersistentModelIndex, i stedet for QModelIndex. I motsetning til QModelIndex kan QPersistentModelIndex lagres trygt, siden referansene til elementene vil fortsette a v re gyldige sa lenge de kan nas av modellen.

For a gjore elementer kontrollerbare, ma vi overstyre metodeflaggene () og utstyre elementene med et ekstra flagg Qt :: ItemIsUserCheckable.

Den faktiske funksjonaliteten er implementert i metodene setData () og data (). I setData () kontrollerer vi forst og fremst indeksens gyldighet. Siden vi bestemte oss for a handtere Qt :: CheckStateRole bare, returnerer vi falske for alle andre roller. Hvis brukeren sjekker et element, dvs. hvis verdien som overfores til metoden setData (), tilsvarer Qt :: Checked, setter vi indeksen inn i settet med merkede elementer. Hvis brukeren fjerner et element, fjerner vi det fra settet. Deretter sender vi signaldataChanged () og returnerer sann.

I data () handterer vi oss selv Qt :: CheckStateRole og Qt :: BackgroundColorRole, for alle andre roller returnerer vi standard implementering. Vi lager dataene basert pa om de er inneholdt i settet av de kontrollerte elementene eller ikke. Hvis elementet er inneholdt i det valgte merket, returnerer vi Qt :: Kontrollert, ellers returnerer vi Qt :: Ikke merket. Vi spesifiserer ogsa bakgrunnen for elementer, merkede elementer har bakgrunnen gjengitt i lysegult, dvs. # ffffb2, ukontrollerte elementer har en hvit bakgrunn.

Merk: Den betingede utsagnet.

er ingenting annet enn:

Det er det! Ytterligere detaljer om implementeringen finner du i kildefilene i begynnelsen av denne artikkelen (Variant 2).


Hilsener! Ønsker du å spille i det største kasinoet? Vi forbereder det for deg. Prøv her nå!