私はしばらくの間これを苦労してきました。QFileSystemModelでメンバ関数をオーバーライド(再実装)する方法
QtのQFileSystemModel
は、本当に悪いアイコンフェッチアルゴリズムのために数百のファイルをフェッチすると実際には遅いです。
アイコンを完全に無効にしたい。これは私が実行しようとしているコードである
:
class FileModel : public QFileSystemModel {
using QFileSystemModel::data;
public:
QVariant QFileSystemModel::data(const QModelIndex &index, int role) const
{
// my own implementation here
}
}
それは
で失敗します。彼らは( http://qt.gitorious.org/qt/qt/blobs/4.7/src/gui/dialogs/qfilesystemmodel.cpp QFileSystemModelのソースはこちらです)仮想ではないQFileSystemModel::data
方法でフェッチされます
cannot define member function QFileSystemModel::data witin FileModel
UPDATE
私は関数をオーバーライドすることができたし、これは私が今持っているものです。
class FileModel : public QFileSystemModel {
public:
QVariant data(const QModelIndex &index, int role) const
{
// Here goes Qt's implementation
Q_D(const QFileSystemModel);
if (!index.isValid() || index.model() != this)
return QVariant();
switch (role) {
case Qt::EditRole:
case Qt::DisplayRole:
switch (index.column()) {
case 0: return d->name(index);
case 1: return d->size(index);
case 2: return d->type(index);
case 3: return d->time(index);
default:
qWarning("data: invalid display value column %d", index.column());
break;
}
break;
case FilePathRole:
return filePath(index);
case FileNameRole:
return d->name(index);
case Qt::DecorationRole:
if (index.column() == 0) {
QIcon icon = d->icon(index); // This is the part I need to change
if (icon.isNull()) {
if (d->node(index)->isDir())
icon = d->fileInfoGatherer.iconProvider()->icon(QFileIconProvider::Folder);
else
icon = d->fileInfoGatherer.iconProvider()->icon(QFileIconProvider::File);
}
return icon;
}
break;
case Qt::TextAlignmentRole:
if (index.column() == 1)
return Qt::AlignRight;
break;
case FilePermissions:
int p = permissions(index);
return p;
}
return QVariant();
}
};
しかし、このコードはコンパイルされません。これは、私はエラーを取得します
http://doc.qt.io/archives/qt-4.7/qfilesystemmodel.html#setIconProvider
パラメータ、QFileIconProvider
になりそうだ、:これは予想されたように、「アイコン・プロバイダー」を設定する方法があるよう 'const QFileSystemModelPrivate* QFileSystemModel::d_func() const' is private
も一部を使用して入れていない、あなたの宣言からQFileSystemModel ::一部を除去を参照してください。ここには必要ない。 –
'data'は仮想でなければならない。 'QFileSystemModel'は' QAbstractItemModel'から派生し、そのクラス 'data'は純粋仮想関数です。 http://qt-project.org/doc/qt-4.8/qabstractitemmodel.html#data –
カミルの言葉を参照してください。 Moritz:基本が既に仮想関数、純粋関数、その他の関数を宣言している場合は、virtualキーワードは必要ありません。 –