QTのQfilesystemModelでデータとSetDataを上書きします
-
21-09-2019 - |
質問
私がやろうとしていること:qfilesystemmodelのsetDataとデータのキャッシュを実装するデータとデータのキャッシュを実装するデータを上書きします。
テスト目的にqlistViewを使用しています。
関連するコードは次のとおりです。
親としてQfilesystemModelを使用した私のクラス:
.h-file:
#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);
}
私がオブジェクトと呼ぶ方法:
pics = new PicsInFileSystemModel;
form->listViewPictures->setModel(pics);
form->listViewPictures->setRootIndex(pics->index(
"mypath"));
質問は次のとおりです。私の意見では、ビューがモデルにアクセスしたときに多くのデバッグ出力を見る必要があります。しかし、何もありません。誰かが私が間違っていることを考えていますか?
ありがとう!
編集:回答が機能します。私もこれを変更する必要がありました
return ((QFileSystemModel)this).data(index,role);
の中へ
QFileSystemModel::data(index,role))
解決
の署名 data
方法は次のとおりです。
QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const
あなたの方法はコンスト以外です。メソッドを作成し、変更する必要がある変数をマークします。
他のヒント
君の data
元のものと一致しないため、関数は決して呼び出されません 意味. 。あなたは違う 再実装 data
, 、コンスト以外のバージョンを提供しました。
使用する qfileiconprovider その目的のために。
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;
}
}
このクラスを使用するには、モデルにSeticOnProviderを呼び出します。
QFileSystemModel * model = new QFileSystemModel(this);
model->setIconProvider(new ThumbnailIconProvider());
model->setRootPath(...);
...
この方法で簡単にキャッシュすることができることに注意してください。
所属していません StackOverflow