#c #qt #qt4 #qlistview
#c #qt #qt4 #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");
Этот пример компилирует и удаляет «ABC» и «123» в моем списке, но не «xyz». Почему бы и нет? Нужно ли мне как-то перерисовывать ListView? Я сделал что-то не так с нулевым значением?
Спасибо.
Комментарии:
1. Примечание: Нет необходимости создавать QStringLists в куче. Контейнеры неявно являются общими и обычно передаются по значению /const ref.
2. ДА. В Qt вы можете передавать экземпляры may (например, QString, QList) по значению без каких-либо вычислительных затрат. посмотрите здесь
Ответ №1:
Если вам часто требуется изменять список строк и у вас есть подключенные представления, которые необходимо обновлять, вы могли бы вообще отказаться от QStringList и использовать исключительно QStringListModel. Вы можете добавлять / удалять данные там с помощью insertRow / removeRows и setData. Это гарантирует, что представления всегда отражают модель так, как вы ожидаете. Это можно было бы обернуть, чтобы предотвратить утомительную работу. Что-то вроде (непроверенное):
class StringList : public QStringListModel
{
public:
void append (const QStringamp; string){
insertRows(rowCount(), 1);
setData(index(rowCount()-1), string);
}
StringListamp; operator<<(const QStringamp; string){
append(string);
return *this;
}
};
Ответ №2:
Вы изменили QStringList
, вам нужно изменить модель:
stringList->append("xyz");
listModel->setStringList(*stringList);