Как добавить пользовательскую строку в QFileSystemModel?

Я использую QFileSystemModel для представления структуры файла через QTreView. Все работает нормально, но мне нужно добавить дополнительную строку на каком-то уровне дерева. Например, сейчас это:

-root

--row1

--row2

--row3

Все эти строки отображают папки / файлы из файловой системы. Я нуждаюсь:

-root

--row1

--row2

--row3

- пользовательский ряд

Таким образом, пользовательская строка не представляет никаких данных из файловой системы. Мне просто нужно добавить сюда свои данные. Я прочитал много вещей из Интернета, и люди советуют использовать прокси-модель и переопределить функции rowCount(), data() и flags(). Я пытался это сделать (использовал класс, производный от QSortFilterProxyModel), но я никогда не получал свою строку в функциях data () и flags(). Похоже, что это берет из исходной модели.

QVariant AddonFilterModel::data (const QModelIndex & index, int role) const
{
    if(role == Qt::DisplayRole && index.row() == FilterModel::rowCount(index))
    {
        return QString("Add-Ons");
    }

    return FilterModel::data(index, role);
}

Qt::ItemFlags AddonFilterModel::flags(const QModelIndex & index) const
{
    if (!index.isValid())
        return 0;

    if (index.row() == FilterModel::rowCount(index))
    {
        return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
    }

    return FilterModel::flags(index);
}

int AddonFilterModel::rowCount(const QModelIndex &parent) const
{
    int count = FilterModel::rowCount(parent);

    if(parent == this->getRootIndex())
    {
        return count+1;
    }
    return count;
}

Использование класса, производного от QAbstractProxyModel, недопустимо, потому что мне нужны функции фильтрации QSortFilterProxyModel().

Также я попытался переопределить rowCount () QFileSystemModel, чтобы внести изменения непосредственно в модель, но я получаю ошибку "массив вне диапазона" из кода QT.

Я пробовал метод insertRow(), но он не работает. Я думаю, потому что QFileSystemModel только для чтения.

Кто-нибудь сталкивался с этой проблемой? Есть идеи?

1 ответ

Поздний ответ. Вы должны создать подкласс Qabstractitemmodel.

Другие вопросы по тегам