Как добавить пользовательскую строку в QFileSystemModel? - PullRequest
4 голосов
/ 17 января 2012

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

-root

- row1

- row2

- row3

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

-корень

- строка1

- строка2

- строка3

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

Таким образом, пользовательская строка не представляет никаких данных из файловой системы.Мне просто нужно добавить сюда свои данные.Я прочитал много вещей из интернета, и люди советуют использовать прокси-модель и переопределить функции 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 Ответ

0 голосов
/ 02 июля 2015

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

...