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.

È stato utile?

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;
  }
};
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top