Модель QStringListModel

Последнее обновление: 11.01.2024

Класс QStringListModel представляет интерфейс для работы со списком строк. Все данные модели хранятся в виде объекта QStringList, который представляет список строк (значений QString) и унаследован от типа QList.

QStringList

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 хранит начальный список без изменений.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850