Как добавить пользовательскую строку в 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.