Метод значков QIconProvider вызывается для файлов, которых нет в фильтре

Я пытаюсь заполнить QListWidget (в виде значка) с QFileSystemModel. Я хочу перечислить папки и только файлы с определенным расширением. Я хочу показать предварительный просмотр своих файлов в виде их миниатюры, поэтому я создаю подкласс класса QIconProvider и задаю его для моей модели. Перед настройкой моего QIconProvider для модели, я уже отфильтровал нужные мне файлы в моей модели, вызывается значок (const QFileInfo & info) для каждого файла, который существует в указанном каталоге. Я нашел способ проверить расширение файла перед возвратом своего пользовательского значка, но мне интересно, есть ли способ избежать этого.

m_itemsModel = new QFileSystemModel(this);  
m_itemsModel->setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);
m_itemsModel->setRootPath(QDir::homePath());
QStringList filters = formatsList();
m_itemsModel->setNameFilters(filters);
m_itemsModel->setNameFilterDisables(false);
ui.listView->setModel(m_itemsModel);
m_itemsModel->setIconProvider(new ThumbnailIconProvider(QRect(0, 0, 50, 50)));

мой QIconProvider:

    ThumbnailIconProvider::ThumbnailIconProvider(const QRect &rect)
    : QFileIconProvider() {
    m_rect = rect;
}

    QIcon ThumbnailIconProvider::icon(const QFileInfo & info) const {
        static QStringList filters = formatsList();
        QString fileName = info.fileName();
        QString extension = "*" + fileName.right(fileName.length() - fileName.lastIndexOf("."));
        if (info.isFile() && filters.contains(extension)) {
            QString path = info.absoluteFilePath();
            FileDetails details = fileDetailsFromPathForRect(path, m_rect);
            QPixmap pixmap = QPixmap::fromImage(details.image);
            QIcon icon(pixmap);
            return icon;
        }
        else
            return QFileIconProvider::icon(info);
    }

Есть идеи, пожалуйста?

0 ответов

Другие вопросы по тегам