Frage

Dies ist meine erste QT -Frage - ich bin im Allgemeinen ein C# -Programmierer, also verzeih mir, dass ich eine dumme Frage gestellt habe, für die ich sicher bin, dass es eine sehr einfache Antwort gibt, die ich einfach nicht finden kann:

Ich möchte eine Liste zu einer Liste hinzufügen, sagen wir im Moment, dass es sich um Saiten handelt. Ich habe eine QListView: UI->listView, eine QStringlist und ein QStringListModel:

stringList = new QStringList();
stringList->append("ABC");
stringList->append("123");

listModel = new QStringListModel(*stringList, NULL);
ui->listView->setModel(listModel);

stringList->append("xyz");

Dieses Beispiel kompiliert und enttäuscht "ABC" und "123" in meiner Liste, aber nicht "xyz". Warum nicht? Muss ich die ListView irgendwie neu streichen? Habe ich mit dem Null etwas falsch gemacht?

Vielen Dank.

War es hilfreich?

Lösung

Sie haben die geändert QStringList, Sie müssen das Modell ändern:

stringList->append("xyz");
listModel->setStringList(*stringList);

Andere Tipps

Wenn Sie häufig die String -Liste ändern und angeschlossene Ansichten haben müssen, die aktualisiert werden müssen, können Sie in Betracht ziehen, die QStringlist überhaupt zu beseitigen und ausschließlich das QStringListModel zu verwenden. Sie können dort Daten mit Insertrows/Removerows und SetData hinzufügen/entfernen. Dies stellt sicher, dass die Ansichten das Modell immer so widerspiegeln, wie Sie es erwarten würden. Dies könnte verpackt werden, um mühsame Arbeiten zu verhindern. So etwas wie (ungetestet):

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;
  }
};
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top