Cómo anular (volver a implementar) una función miembro en QFileSystemModel
He estado luchando con esto por un tiempo.
Qt'sQFileSystemModel
es muy lento cuando se recuperan varios cientos de archivos debido a un algoritmo de recuperación de iconos realmente malo.
Quiero desactivar completamente los iconos. Son recogidos enQFileSystemModel::data
Método que no es virtual (la fuente de QFileSystemModel está disponible aquí:http://qt.gitorious.org/qt/qt/blobs/4.7/src/gui/dialogs/qfilesystemmodel.cpp)
Este es el código que estoy tratando de ejecutar:
<code>class FileModel : public QFileSystemModel { using QFileSystemModel::data; public: QVariant QFileSystemModel::data(const QModelIndex &index, int role) const { // my own implementation here } } </code>
pero falla con
cannot define member function QFileSystemModel::data witin FileModel
ACTUALIZAR
He logrado anular la función y esto es lo que tengo ahora:
<code>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(); } }; </code>
Sin embargo este código no compila. Este es el error que recibo:'const QFileSystemModelPrivate* QFileSystemModel::d_func() const' is private