Класс QStringListModel представляет интерфейс для работы со списком строк. Все данные модели хранятся в виде объекта QStringList,
который представляет список строк (значений QString) и унаследован от типа QList
.
QStringList предоставляет множество конструкторов. Но в общем случае мы можем создать пустой список:
QStringList people;
А можем инициализировать набором объектов QString или другим списком:
QStringList people = { "Tom", "Bob", "Sam" };
Также QStringList предоставляет много различных методов для манипуляции элементами списока. Отмечу только некоторые основные возможности. Прежде всего для этого типа реализован оператор <<, который позволяет добавить в список отдельные строки или другой список.
QStringList people; people << "Tom" << "Bob" << "Sam"; // добавляем в список три строки
С помощью индексов мы можем обращаться к элементам списка как в обычном массиве:
QStringList people = { "Tom", "Bob", "Sam" }; people[1] = "Robert"; // перебор списка for (int i{}; i < people.length(); i++) { std::cout << people[i].toStdString() << std::endl; } // или так for(const auto &person: people) { std::cout << person.toStdString() << std::endl; }
Методы управления строками:
append(): добавляет элемент в конец списка
prepend(): добавляет элемент в начало списка
insert(): вставляет элемент по определенному индексу
replace(): заменяет элемент по определенному индексу другим
removeAll(): удаляет все вхождения элемента
removeAt(): удаляет элемент по определенному индексу
removeFirst(): удаляет первый элемент
removeLast(): удаляет последний элемент
filter(): фильтрует элементы
Для создания объекта модели QStringListModel в ее конструктор можно передать данный список строк:
QStringListModel(QObject *parent = nullptr) QStringListModel(const QStringList &strings, QObject *parent = nullptr)
Для управления списком строк класс QStringListModel предоставляет два метода:
void setStringList(const QStringList &strings)
: устанавливает список
QStringList stringList()
: возвращает список
Причем при установке списка строк QStringListModel получает копию списка, а все операции с оригинальным списком никак не влияют на модель. Например:
#include <QApplication> #include <iostream> #include <QStringListModel> int main(int argc, char *argv[]) { QApplication a(argc, argv); QStringList people = { "Tom", "Bob", "Sam"}; // определяем модель QStringListModel *model = new QStringListModel(people); people.append("Alice"); people.removeAll("Bob"); people.replace(0, "Tomas"); std::cout << "Model:" << std::endl; for(const auto &person: model->stringList()){ std::cout << person.toStdString() << std::endl; } std::cout << "StringList:" << std::endl; for(const auto &person: people){ std::cout << person.toStdString() << std::endl; } return a.exec(); }
Консольный вывод:
Model: Tom Bob Sam StringList: Tomas Sam Alice
Мы видим, что содержимое списка people после ряда маниупляций изменилось, тогда как модель QStringListModel хранит начальный список без изменений.