Question

Que faire I'am essayer: Ecraser setData de QFileSystemModel et des données pour mettre en œuvre des images dans Caching le répertoire affiché.

J'utilise un QListView à des fins de test.

Voici le code correspondant:

Ma classe avec QFileSystemModel comme parent:

.h fichier:

#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-file:

#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);
}

Comment j'appelle l'objet:

pics = new PicsInFileSystemModel;
form->listViewPictures->setModel(pics);
form->listViewPictures->setRootIndex(pics->index(
        "mypath"));

Voici donc la question: À mon avis, je devrais voir beaucoup de sorties de débogage lorsque l'affichage d'accès du modèle. Mais il n'y a rien. Quelqu'un at-il une idée de ce que I'am faire le mal?

Merci!

EDIT: Les réponses fonctionnent. Je devais aussi changer cette

return ((QFileSystemModel)this).data(index,role); 

dans

QFileSystemModel::data(index,role))
Était-ce utile?

La solution

Signature de la méthode de data est:

QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const

Votre méthode est non-const. Faites votre méthode const et marquer les variables que vous devez modifier mutable.

Autres conseils

Votre fonction data est jamais appelé parce qu'il ne correspond pas à la . Vous n'êtes pas réimplémentant data, vous avez fourni une version non-const.

Utilisez QFileIconProvider à cette fin.

ThumbnailIconProvider.h

#ifndef THUMBNAILICONPROVIDER_H
#define THUMBNAILICONPROVIDER_H

#include <QFileIconProvider>

class ThumbnailIconProvider : public QFileIconProvider
{
public:
    ThumbnailIconProvider();

    QIcon icon(const QFileInfo & info) const;
};

#endif // THUMBNAILICONPROVIDER_H

ThumbnailIconProvider.cpp

#include "thumbnailiconprovider.h"

#include <QDebug>

ThumbnailIconProvider::ThumbnailIconProvider()
{
}

QIcon ThumbnailIconProvider::icon(const QFileInfo & info) const
{
    QIcon ico(info.absoluteFilePath());
    if (ico.isNull())
        return QFileIconProvider::icon(info);
    else {
        qDebug() << "Fetch icon for " << info.absoluteFilePath();
        return ico;
    }
}

Pour utiliser cet appel classe setIconProvider sur votre modèle.

QFileSystemModel * model = new QFileSystemModel(this);
model->setIconProvider(new ThumbnailIconProvider());
model->setRootPath(...);
...

Notez que vous pouvez facilement intégrer en tant que cache cette façon.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top