Что я пытаюсь сделать:
Перезаписать setData и данные QFileSystemModel для реализации кэширования изображений в показанном каталоге.
Я использую QListView для тестирования.
Вот соответствующий код:
Мой класс с QFileSystemModel в качестве родителя:
.h-файл:
#ifndef QPICSINFILESYSTEMMODEL_H
#define QPICSINFILESYSTEMMODEL_H
#include <QFileSystemModel>
#include <QCache>
#include <QDebug>
/* This Model holds all Picturefiles with a cached QPixmap of
* them.
*/
class PicsInFileSystemModel : public QFileSystemModel
{
public:
PicsInFileSystemModel();
QVariant data (const QModelIndex & index, int role);
private:
QCache<qint64,QPixmap> *cache; //Cache for the pictures
};
#endif // QPICSINFILESYSTEMMODEL_
.cpp-файл:
#include "PicsInFileSystemModel.h"
PicsInFileSystemModel::PicsInFileSystemModel()
{
QStringList myFilter;
this->setFilter(QDir::Files | QDir::AllDirs);
this->setRootPath(QDir::rootPath());//QDir::homePath());
myFilter << "jpeg" << "jpg" << "png";
//this->setNameFilters(myFilter);
}
/* Reimplement data to send the pictures to the cache */
QVariant PicsInFileSystemModel::data ( const QModelIndex & index, int role = Qt::DisplayRole ) {
qDebug() << "index: " << index << "role: " << role;
return ((QFileSystemModel)this).data(index,role);
}
Как я называю объект:
pics = new PicsInFileSystemModel;
form->listViewPictures->setModel(pics);
form->listViewPictures->setRootIndex(pics->index(
"mypath"));
Итак, вот вопрос: по моему мнению, я должен увидеть много отладочных выходов, когда View получит доступ к модели. Но там ничего нет. Кто-нибудь знает, что я делаю не так?
Спасибо!
EDIT:
Ответы работают. Я также должен был изменить это
return ((QFileSystemModel)this).data(index,role);
в
QFileSystemModel::data(index,role))