QT4 QstringListModel в QListView

Это мой первый вопрос QT-я вообще программист C#, поэтому простите меня за глупый вопрос, на который я уверен, что есть очень простой ответ, который я просто не могу найти:

Я хочу добавить элементы в список, на данный момент, скажем, это строки. У меня есть QListView: UI->listView, QStringList и QStringListModel:

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

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

stringList->append("xyz");

этот пример компилирует и disaplys "ABC" и "123"в моем списке, но не "xyz". Почему бы и нет? Нужно ли перекрашивать listView как-то? Я сделал что-то не так с нулем?

спасибо.

2 ответов


изменения QStringList, вам нужно изменить модель:

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

Если вам часто нужно изменять список строк и подключенные представления, которые необходимо обновить, вы можете рассмотреть возможность отказа от QStringList в первую очередь и исключительно с помощью QStringListModel. Вы можете добавлять / удалять данные там, используя insertRows / removeRows и setData. Это гарантирует, что представления всегда отражают модель так, как вы ожидаете. Это может быть завернуто, чтобы предотвратить утомительную работу. Что-то вроде (непроверенных):

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;
  }
};