QT4 QstringListModel в QListView - PullRequest
       22

QT4 QstringListModel в QListView

6 голосов
/ 27 апреля 2011

Это мой первый вопрос на 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");

Этот пример компилирует и отключает "ABC" и "123" в моем списке, но не "xyz". Почему бы и нет? Нужно ли как-нибудь перерисовывать listView? Что-то не так с NULL?

Спасибо.

Ответы [ 2 ]

23 голосов
/ 29 апреля 2011

Если вам часто требуется изменить список строк и иметь связанные представления, которые необходимо обновить, вы можете в первую очередь покончить с 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;
  }
};
6 голосов
/ 27 апреля 2011

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

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