From 19258608e9ea02043ce9b53d4a9c99700ce49c1b Mon Sep 17 00:00:00 2001 From: Sune Vuorela Date: Thu, 21 Mar 2024 12:05:27 +0100 Subject: [PATCH] QFileSystemModel: Add role for fileinfo Instead of having users traverse a ProxyModel hierarchy to get to a QFileSystemModel to use the fileInfo(QModelIndex) function, just let it be available with the roles. Change-Id: I285347d1d85b4c6253fcb893737aa629a56e27fd Reviewed-by: Richard Moe Gustavsen Reviewed-by: Ahmad Samir --- src/gui/itemmodels/qfilesystemmodel.cpp | 4 ++++ src/gui/itemmodels/qfilesystemmodel.h | 4 +++- .../gui/itemmodels/qfilesystemmodel/tst_qfilesystemmodel.cpp | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/gui/itemmodels/qfilesystemmodel.cpp b/src/gui/itemmodels/qfilesystemmodel.cpp index 89ced676e5a..290891322f0 100644 --- a/src/gui/itemmodels/qfilesystemmodel.cpp +++ b/src/gui/itemmodels/qfilesystemmodel.cpp @@ -31,6 +31,7 @@ using namespace Qt::StringLiterals; \value FilePathRole \value FileNameRole \value FilePermissions + \value FileInfoRole The QFileInfo object for the index */ /*! @@ -730,6 +731,8 @@ QVariant QFileSystemModel::data(const QModelIndex &index, int role) const return filePath(index); case FileNameRole: return d->name(index); + case FileInfoRole: + return QVariant::fromValue(fileInfo(index)); case Qt::DecorationRole: if (index.column() == QFileSystemModelPrivate::NameColumn) { QIcon icon = d->icon(index); @@ -1255,6 +1258,7 @@ QHash QFileSystemModel::roleNames() const ret.insert(QFileSystemModel::FilePathRole, QByteArrayLiteral("filePath")); ret.insert(QFileSystemModel::FileNameRole, QByteArrayLiteral("fileName")); ret.insert(QFileSystemModel::FilePermissions, QByteArrayLiteral("filePermissions")); + ret.insert(QFileSystemModel::FileInfoRole, QByteArrayLiteral("fileInfo")); return ret; } diff --git a/src/gui/itemmodels/qfilesystemmodel.h b/src/gui/itemmodels/qfilesystemmodel.h index 17bce1946f2..1fd1041f154 100644 --- a/src/gui/itemmodels/qfilesystemmodel.h +++ b/src/gui/itemmodels/qfilesystemmodel.h @@ -32,11 +32,13 @@ Q_SIGNALS: void directoryLoaded(const QString &path); public: + // ### Qt 7: renumber these values to be before Qt::UserRole comment. enum Roles { FileIconRole = Qt::DecorationRole, + FileInfoRole = Qt::UserRole - 1, FilePathRole = Qt::UserRole + 1, FileNameRole = Qt::UserRole + 2, - FilePermissions = Qt::UserRole + 3 + FilePermissions = Qt::UserRole + 3, }; enum Option diff --git a/tests/auto/gui/itemmodels/qfilesystemmodel/tst_qfilesystemmodel.cpp b/tests/auto/gui/itemmodels/qfilesystemmodel/tst_qfilesystemmodel.cpp index e721c8d4346..8ef0b6272a2 100644 --- a/tests/auto/gui/itemmodels/qfilesystemmodel/tst_qfilesystemmodel.cpp +++ b/tests/auto/gui/itemmodels/qfilesystemmodel/tst_qfilesystemmodel.cpp @@ -811,6 +811,7 @@ void tst_QFileSystemModel::setData() QCOMPARE(spy.size(), 1); QList arguments = spy.takeFirst(); QCOMPARE(model->data(idx, QFileSystemModel::FileNameRole).toString(), newFileName); + QCOMPARE(model->data(idx, QFileSystemModel::FileInfoRole).value().fileName(), newFileName); QCOMPARE(model->fileInfo(idx).filePath(), tmp + '/' + newFileName); QCOMPARE(model->index(arguments.at(0).toString()), model->index(tmp)); QCOMPARE(arguments.at(1).toString(), oldFileName);