@@ -76,21 +76,20 @@ static DDciFileShared getDciFile(const QString &dciFilePath, bool usePath = true
7676 return shared;
7777}
7878
79+ #if QT_VERSION < QT_VERSION_CHECK(6, 8, 0)
7980DDciFileEngineIterator::DDciFileEngineIterator (QDir::Filters filters, const QStringList &nameFilters)
80- #if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
81- : QAbstractFileEngineIterator(nullptr , filters, nameFilters)
82- #else
8381 : QAbstractFileEngineIterator(filters, nameFilters)
84- #endif
8582{
86-
8783}
88-
89- #if QT_VERSION >= QT_VERSION_CHECK(6, 8, 1)
90- DDciFileEngineIterator::DDciFileEngineIterator (QDirListing::IteratorFlags filters, const QStringList &nameFilters)
91- : QAbstractFileEngineIterator(nullptr , filters, nameFilters)
84+ #else
85+ DDciFileEngineIterator::DDciFileEngineIterator (const QString &path, QDir::Filters filters, const QStringList &nameFilters)
86+ : QAbstractFileEngineIterator(path, filters, nameFilters)
9287{
88+ }
9389
90+ DDciFileEngineIterator::DDciFileEngineIterator (const QString &path, QDirListing::IteratorFlags filters, const QStringList &nameFilters)
91+ : QAbstractFileEngineIterator(path, filters, nameFilters)
92+ {
9493}
9594#endif
9695
@@ -116,18 +115,33 @@ bool DDciFileEngineIterator::advance()
116115 list = file->list (paths.second );
117116 }
118117
118+ bool excludeDirs = false , excludeFiles = false , excludeSymlinks = false ;
119+ #if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
120+ if (this ->m_listingFilters ) {
121+ const auto filters = this ->m_listingFilters .value ();
122+ excludeDirs = filters.testFlag (QDirListing::IteratorFlag::ExcludeDirs);
123+ excludeFiles = filters.testFlag (QDirListing::IteratorFlag::ExcludeFiles);
124+ excludeSymlinks = filters.testFlag (QDirListing::IteratorFlag::ExcludeSpecial) && !filters.testFlag (QDirListing::IteratorFlag::ResolveSymlinks);
125+ } else
126+ #endif
127+ {
128+ const auto filters = this ->filters ();
129+ excludeDirs = !filters.testFlag (QDir::Dirs);
130+ excludeFiles = !filters.testFlag (QDir::Files);
131+ excludeSymlinks = filters.testFlag (QDir::NoSymLinks);
132+ }
133+
119134 for (int i = current + 1 ; i < list.count (); ++i) {
120135 // 先检查文件类型
121- const auto filters = this ->filters ();
122136 const auto fileType = file->type (list.at (i));
123137 if (fileType == DDciFile::Directory) {
124- if (!filters. testFlag (QDir::Files) )
138+ if (excludeDirs )
125139 continue ;
126140 } else if (fileType == DDciFile::File) {
127- if (!filters. testFlag (QDir::Files) )
141+ if (excludeFiles )
128142 continue ;
129143 } else if (fileType == DDciFile::Symlink) {
130- if (filters. testFlag (QDir::NoSymLinks) )
144+ if (excludeSymlinks )
131145 continue ;
132146 } else { // DDciFile::UnknowFile
133147 continue ;
@@ -527,7 +541,7 @@ QString DDciFileEngine::fileName(QAbstractFileEngine::FileName file) const
527541 case AbsolutePathName:
528542 return QDir::cleanPath (DCI_FILE_SCHEME + dciFilePath);
529543 case BaseName:
530- return QFileInfo (subfilePath).baseName ();
544+ return QFileInfo (subfilePath).fileName ();
531545#if QT_VERSION >= QT_VERSION_CHECK(6, 4, 0)
532546 case AbsoluteLinkTarget:
533547#else
@@ -572,22 +586,28 @@ QDateTime DDciFileEngine::fileTime(QAbstractFileEngine::FileTime time) const
572586 return QFileInfo (dciFilePath).fileTime (static_cast <QFile::FileTime>(time));
573587}
574588#endif
575- #if QT_VERSION >= QT_VERSION_CHECK(6, 8, 1)
576- QAbstractFileEngine::IteratorUniquePtr DDciFileEngine::beginEntryList (const QString &path, QDirListing::IteratorFlags filters, const QStringList &filterNames)
577- #elif QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
589+ #if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
578590QAbstractFileEngine::IteratorUniquePtr DDciFileEngine::beginEntryList (const QString &path, QDir::Filters filters, const QStringList &filterNames)
579591#else
580592DDciFileEngine::Iterator *DDciFileEngine::beginEntryList (QDir::Filters filters, const QStringList &filterNames)
581593#endif
582594{
583595#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
584- Q_UNUSED (path);
585- return QAbstractFileEngine::IteratorUniquePtr (new DDciFileEngineIterator (filters, filterNames));
596+ return QAbstractFileEngine::IteratorUniquePtr (new DDciFileEngineIterator (path, filters, filterNames));
586597#else
587598 return new DDciFileEngineIterator (filters, filterNames);
588599#endif
589600}
590601
602+ #if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
603+ QAbstractFileEngine::IteratorUniquePtr DDciFileEngine::beginEntryList (const QString &path, QDirListing::IteratorFlags filters, const QStringList &filterNames)
604+ {
605+ auto iterator = new DDciFileEngineIterator (path, filters, filterNames);
606+ iterator->m_listingFilters = filters;
607+ return QAbstractFileEngine::IteratorUniquePtr (iterator);
608+ }
609+ #endif
610+
591611#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
592612QAbstractFileEngine::IteratorUniquePtr DDciFileEngine::endEntryList ()
593613#else
0 commit comments