Jak przesłonić (ponownie zaimplementować) funkcję składową w QFileSystemModel

Od jakiegoś czasu zmagam się z tym.

Qt'sQFileSystemModel jest naprawdę powolny przy pobieraniu kilkuset plików ze względu na naprawdę zły algorytm pobierania ikon.

Chcę całkowicie wyłączyć ikony. Są one pobieraneQFileSystemModel::data metoda, która nie jest wirtualna (źródło QFileSystemModel jest dostępne tutaj:http://qt.gitorious.org/qt/qt/blobs/4.7/src/gui/dialogs/qfilesystemmodel.cpp)

Oto kod, który próbuję uruchomić:

<code>class FileModel : public QFileSystemModel {
    using QFileSystemModel::data;
public:
    QVariant QFileSystemModel::data(const QModelIndex &index, int role) const
    {
     // my own implementation here
    }
}
</code>

ale zawodzi z

cannot define member function QFileSystemModel::data witin FileModel

AKTUALIZACJA

Udało mi się nadpisać funkcję i to właśnie mam teraz:

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

Jednak ten kod się nie kompiluje. To jest błąd, który otrzymuję:'const QFileSystemModelPrivate* QFileSystemModel::d_func() const' is private

questionAnswers(2)

yourAnswerToTheQuestion