Я использую 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 только для чтения.
Кто-нибудь сталкивался с этой проблемой?Есть идеи?