QT4 QstringListModel in QListView
Domanda
Questa è la mia prima domanda QT - Sono in genere un programmatore C # quindi mi perdoni per aver posto una domanda stupida per il quale io sono sicuro che c'è una risposta molto semplice, che io proprio non riesco a trovare:
Voglio aggiungere elementi a un elenco, per il momento diciamo che stanno stringhe.
Ho un QListView: UI->listView
, un QStringList, e un QStringListModel:
stringList = new QStringList();
stringList->append("ABC");
stringList->append("123");
listModel = new QStringListModel(*stringList, NULL);
ui->listView->setModel(listModel);
stringList->append("xyz");
In questo esempio si compila e disaplys "ABC" e "123" nella mia lista, ma non "xyz". Perchè no? Ho bisogno di ridipingere il listView in qualche modo? Ho fatto qualcosa di sbagliato con il NULL?
Grazie.
Soluzione
Hai modificato il QStringList
, è necessario modificare il modello:
stringList->append("xyz");
listModel->setStringList(*stringList);
Altri suggerimenti
Se avete spesso bisogno di modificare l'elenco di stringa e aver collegato viste che necessità di essere aggiornato, si potrebbe prendere in considerazione eliminando la QStringList in primo luogo ed esclusivamente utilizzando il QStringListModel. È possibile aggiungere / rimuovere i dati non utilizzando insertRows / removeRows e setData. In questo modo i punti di vista riflettono sempre il modello nel modo che ci si aspetterebbe. Questo potrebbe essere avvolto per evitare lavoro noioso. Qualcosa di simile (non testata):
class StringList : public QStringListModel
{
public:
void append (const QString& string){
insertRows(rowCount(), 1);
setData(index(rowCount()-1), string);
}
StringList& operator<<(const QString& string){
append(string);
return *this;
}
};