@@ -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,29 @@ bool DDciFileEngineIterator::advance()
116115 list = file->list (paths.second );
117116 }
118117
118+ #if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
119+ const auto filters = this ->m_listingFilters ;
120+ const bool excludeDirs = filters.testFlag (QDirListing::IteratorFlag::ExcludeDirs);
121+ const bool excludeFiles = filters.testFlag (QDirListing::IteratorFlag::ExcludeFiles);
122+ const bool excludeSymlinks = filters.testFlags (QDirListing::IteratorFlag::ExcludeSpecial) && !filters.testFlag (QDirListing::IteratorFlag::ResolveSymlinks);
123+ #else
124+ const auto filters = this ->filters ();
125+ const bool excludeDirs = !filters.testFlag (QDir::Dirs);
126+ const bool excludeFiles = !filters.testFlag (QDir::Files);
127+ const bool excludeSymlinks = filters.testFlag (QDir::NoSymLinks);
128+ #endif
129+
119130 for (int i = current + 1 ; i < list.count (); ++i) {
120131 // 先检查文件类型
121- const auto filters = this ->filters ();
122132 const auto fileType = file->type (list.at (i));
123133 if (fileType == DDciFile::Directory) {
124- if (!filters. testFlag (QDir::Files) )
134+ if (excludeDirs )
125135 continue ;
126136 } else if (fileType == DDciFile::File) {
127- if (!filters. testFlag (QDir::Files) )
137+ if (excludeFiles )
128138 continue ;
129139 } else if (fileType == DDciFile::Symlink) {
130- if (filters. testFlag (QDir::NoSymLinks) )
140+ if (excludeSymlinks )
131141 continue ;
132142 } else { // DDciFile::UnknowFile
133143 continue ;
@@ -527,7 +537,8 @@ QString DDciFileEngine::fileName(QAbstractFileEngine::FileName file) const
527537 case AbsolutePathName:
528538 return QDir::cleanPath (DCI_FILE_SCHEME + dciFilePath);
529539 case BaseName:
530- return QFileInfo (subfilePath).baseName ();
540+ // QFileInfo::fileName selects FileEngine's BaseName in qt6.
541+ return QFileInfo (subfilePath).fileName ();
531542#if QT_VERSION >= QT_VERSION_CHECK(6, 4, 0)
532543 case AbsoluteLinkTarget:
533544#else
@@ -572,22 +583,29 @@ QDateTime DDciFileEngine::fileTime(QAbstractFileEngine::FileTime time) const
572583 return QFileInfo (dciFilePath).fileTime (static_cast <QFile::FileTime>(time));
573584}
574585#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)
586+ #if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
578587QAbstractFileEngine::IteratorUniquePtr DDciFileEngine::beginEntryList (const QString &path, QDir::Filters filters, const QStringList &filterNames)
579588#else
580589DDciFileEngine::Iterator *DDciFileEngine::beginEntryList (QDir::Filters filters, const QStringList &filterNames)
581590#endif
582591{
583592#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
584593 Q_UNUSED (path);
585- return QAbstractFileEngine::IteratorUniquePtr (new DDciFileEngineIterator (filters, filterNames));
594+ return QAbstractFileEngine::IteratorUniquePtr (new DDciFileEngineIterator (path, filters, filterNames));
586595#else
587596 return new DDciFileEngineIterator (filters, filterNames);
588597#endif
589598}
590599
600+ #if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
601+ QAbstractFileEngine::IteratorUniquePtr DDciFileEngine::beginEntryList (const QString &path, QDirListing::IteratorFlags filters, const QStringList &filterNames)
602+ {
603+ auto iterator = new DDciFileEngineIterator (path, filters, filterNames);
604+ iterator->m_listingFilters = filters;
605+ return QAbstractFileEngine::IteratorUniquePtr (iterator);
606+ }
607+ #endif
608+
591609#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
592610QAbstractFileEngine::IteratorUniquePtr DDciFileEngine::endEntryList ()
593611#else
0 commit comments