2009-11-09 29 views
18

Esiste un equivalente dell'associazione dati di .NET in Qt?Qt equivalente dell'associazione dati .NET?

Desidero popolare alcune caselle combinate e altri widget con QStrings che fanno riferimento a entità specifiche nel mio database. Tuttavia, sarebbe più pulito se potessi associare i dati a queste stringhe piuttosto che interrogare nuovamente il database basandomi su una nuova selezione di combobox o qualche altro schema basato sulla costruzione del mio indice di entità che verrebbe cercato con QStrings.

Il meglio che ho imparato è derivare queste entità da QString e inserirle nei widget in questo modo, ma devo ancora provarlo. Non sono sicuro che funzionerà nel modo in cui lo voglio, e sembra un brutto scherzo.

Se non ci sono dati vincolanti, cosa suggerisci?

Grazie.

+8

+1 Per qualche ragione, l'idea che dovrebbe essere semplice legare gli elementi dell'interfaccia utente a un database oa un modello in memoria non è mai stato così lontano dal mondo Windows. Mentre è possibile con i segnali Qt, è ancora un sacco di codice della piastra della caldaia e molto noioso :( –

+0

In realtà è un'idea molto vecchia che precede .Net. Lo stavo usando nel framework delle forme OOFILE nel 1997 e ho visto codice generato da AppMaker di una vendemmia ancora precedente che genera associazioni anche per il puro codice C. –

risposta

3

Bene, per la casella combinata in particolare, è possibile impostare un modello. Per QObjects in generale è possibile utilizzare il segnale di notifica per le proprietà da connettere o altri segnali non correlati alla proprietà. Penso che ci sia un altro modo per farlo, ma non riesco a ricordare.

+0

Questa sembra la strada da percorrere, grazie, ho una novità su Qt e il tuo suggerimento sui Modelli sembra il modo più semplice per farlo. Penso che questo sia un approccio piuttosto brutto per l'associazione dei dati, ma sembra fornire la funzionalità che voglio.Grazie ancora –

+3

Consiglio vivamente di guardare QDataWidgetMapper che funziona per i widget non nel framework MVC. – cheez

5

Un modo è utilizzare Qt Model/View Classes (con base su QAbstractItemModel), ma è necessario che il widget erediti QAbstractItemView (questo è widget come QTableView ecc.).
Se si desidera mappare il modello Qt a set di widget, che non hanno nulla in comune con QAbstractItemView, è possibile utilizzare QDataWidgetMapper, che associa widget separati a Qt Model/Visualizza indici. Ma comunque, come ha detto Aaron Digulla, è necessario scrivere qualche codice della piastra della caldaia ...

6

Come l'utente indifferente menzionato in un commento è possibile utilizzare la classe QDataWidgetMapper. Questo è un modo abbastanza semplice di associare widget arbitrari ai dati archiviati in un QAbstractItemModel.

L'esempio sulla pagina collegata mostra in poche righe di codice, come è possibile collegare il tuo modello di dati per i widget di input utilizzati comuni:

QDataWidgetMapper *mapper = new QDataWidgetMapper; 
mapper->setModel(model); 
mapper->addMapping(mySpinBox, 0); 
mapper->addMapping(myLineEdit, 1); 
mapper->addMapping(myCountryChooser, 2); 
mapper->toFirst();