Frage

Was ich versuche zu tun: Überschreiben Sie QFILESSYSTEMMODEL -SETDATA und Daten zur Implementierung von Bildern im gezeigten Verzeichnis.

Ich verwende eine QListView zum Testzweck.

Hier ist der entsprechende Code:

Meine Klasse mit QFILESSystemmodel als Elternteil:

.H-Datei:

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

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

Wie ich das Objekt nenne:

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

Hier ist also die Frage: Meiner Meinung nach sollte ich viele Debug -Ausgänge sehen, wenn der Ansicht auf das Modell zugreift. Aber es gibt nichts. Hat jemand eine Idee, was ich falsch mache?

Vielen Dank!

Bearbeiten: Die Antworten funktionieren. Ich musste das auch ändern

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

hinein

QFileSystemModel::data(index,role))
War es hilfreich?

Lösung

Signatur der data Methode ist:

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

Ihre Methode ist nicht konstant. Machen Sie Ihre Methode konstant und markieren Sie die Variablen, die Sie als veränderlich ändern müssen.

Andere Tipps

Dein data Die Funktion wird nie aufgerufen, weil sie nicht mit dem Original übereinstimmt Definition. Du bist nicht Neuauflagen data, Sie haben eine nicht konstante Version bereitgestellt.

Verwenden QFILEICONPROVIDER zu diesem Zweck.

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

Um diese Klasse zu verwenden, rufen Sie SeticonProvider auf Ihrem Modell an.

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

Beachten Sie, dass Sie auf diese Weise leicht einbetten können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top