Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qfileinfo.cpp
Go to the documentation of this file.
1// Copyright (C) 2020 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include "qplatformdefs.h"
5#include "qfileinfo.h"
6#include "qglobal.h"
7#include "qdir.h"
8#include "qfileinfo_p.h"
9#include "qdebug.h"
10
12
13using namespace Qt::StringLiterals;
14
16
17QString QFileInfoPrivate::getFileName(QAbstractFileEngine::FileName name) const
18{
19 if (cache_enabled && !fileNames[(int)name].isNull())
20 return fileNames[(int)name];
21
23 if (fileEngine == nullptr) { // local file; use the QFileSystemEngine directly
24 switch (name) {
28 if (cache_enabled) { // be smart and store both
31 }
33 ret = entry.filePath();
34 else
35 ret = entry.path();
36 break;
37 }
39 ret = QFileSystemEngine::getLinkTarget(fileEntry, metaData).filePath();
40 break;
42 ret = QFileSystemEngine::getRawLinkPath(fileEntry, metaData).filePath();
43 break;
45 ret = QFileSystemEngine::getJunctionTarget(fileEntry, metaData).filePath();
46 break;
49 break;
53 if (cache_enabled) { // be smart and store both
56 }
58 ret = entry.filePath();
59 else
60 ret = entry.path();
61 break;
62 }
63 default: break;
64 }
65 } else {
66 ret = fileEngine->fileName(name);
67 }
68 if (ret.isNull())
69 ret = ""_L1;
70 if (cache_enabled)
71 fileNames[(int)name] = ret;
72 return ret;
73}
74
76{
77 if (cache_enabled && !fileOwners[(int)own].isNull())
78 return fileOwners[(int)own];
80 if (fileEngine == nullptr) {
81 switch (own) {
84 break;
87 break;
88 }
89 } else {
90 ret = fileEngine->owner(own);
91 }
92 if (ret.isNull())
93 ret = ""_L1;
94 if (cache_enabled)
95 fileOwners[(int)own] = ret;
96 return ret;
97}
98
99uint QFileInfoPrivate::getFileFlags(QAbstractFileEngine::FileFlags request) const
100{
101 Q_ASSERT(fileEngine); // should never be called when using the native FS
102 // We split the testing into tests for for LinkType, BundleType, PermsMask
103 // and the rest.
104 // Tests for file permissions on Windows can be slow, especially on network
105 // paths and NTFS drives.
106 // In order to determine if a file is a symlink or not, we have to lstat().
107 // If we're not interested in that information, we might as well avoid one
108 // extra syscall. Bundle detecton on Mac can be slow, especially on network
109 // paths, so we separate out that as well.
110
111 QAbstractFileEngine::FileFlags req;
112 uint cachedFlags = 0;
113
118 req &= (~QAbstractFileEngine::LinkType);
119 req &= (~QAbstractFileEngine::BundleType);
120
122 }
123
128 }
129 }
130
135 }
136 }
137 }
138
143 }
144 }
145
146 if (req) {
147 if (cache_enabled)
148 req &= (~QAbstractFileEngine::Refresh);
149 else
151
152 QAbstractFileEngine::FileFlags flags = fileEngine->fileFlags(req);
153 fileFlags |= uint(flags.toInt());
155 }
156
157 return fileFlags & request.toInt();
158}
159
161{
162 Q_ASSERT(fileEngine); // should never be called when using the native FS
163 if (!cache_enabled)
164 clearFlags();
165
166 uint cf = 0;
167 switch (request) {
169 cf = CachedATime;
170 break;
172 cf = CachedBTime;
173 break;
175 cf = CachedMCTime;
176 break;
178 cf = CachedMTime;
179 break;
180 }
181
182 if (!getCachedFlag(cf)) {
183 fileTimes[request] = fileEngine->fileTime(request);
184 setCachedFlag(cf);
185 }
186 return fileTimes[request];
187}
188
189//************* QFileInfo
190
224
227
349
357{
358}
359
365
367
371{
372}
373
386
392
398
402 : d_ptr(new QFileInfoPrivate(dir.filePath(path)))
403{
404}
405
410 : d_ptr(fileinfo.d_ptr)
411{
412
413}
414
422
450bool comparesEqual(const QFileInfo &lhs, const QFileInfo &rhs)
451{
452 if (rhs.d_ptr == lhs.d_ptr)
453 return true;
455 return false;
456
457 // Assume files are the same if path is the same
458 if (lhs.d_ptr->fileEntry.filePath() == rhs.d_ptr->fileEntry.filePath())
459 return true;
460
461 Qt::CaseSensitivity sensitive;
462 if (lhs.d_ptr->fileEngine == nullptr || rhs.d_ptr->fileEngine == nullptr) {
463 if (lhs.d_ptr->fileEngine != rhs.d_ptr->fileEngine) // one is native, the other is a custom file-engine
464 return false;
465
467 } else {
468 if (lhs.d_ptr->fileEngine->caseSensitive() != rhs.d_ptr->fileEngine->caseSensitive())
469 return false;
470 sensitive = lhs.d_ptr->fileEngine->caseSensitive() ? Qt::CaseSensitive : Qt::CaseInsensitive;
471 }
472
473 // Fallback to expensive canonical path computation
474 return lhs.canonicalFilePath().compare(rhs.canonicalFilePath(), sensitive) == 0;
475}
476
481{
482 d_ptr = fileinfo.d_ptr;
483 return *this;
484}
485
499
503
505
509
516{
518 *this = QFileInfo(path);
520}
521
537
549{
551}
552
560
563
579{
580 Q_D(const QFileInfo);
581 if (d->isDefaultConstructed)
582 return ""_L1;
583 return d->getFileName(QAbstractFileEngine::AbsoluteName);
584}
585
597{
598 Q_D(const QFileInfo);
599 if (d->isDefaultConstructed)
600 return ""_L1;
601 return d->getFileName(QAbstractFileEngine::CanonicalName);
602}
603
604
622{
623 Q_D(const QFileInfo);
624
625 if (d->isDefaultConstructed)
626 return ""_L1;
627 return d->getFileName(QAbstractFileEngine::AbsolutePathName);
628}
629
639{
640 Q_D(const QFileInfo);
641 if (d->isDefaultConstructed)
642 return ""_L1;
643 return d->getFileName(QAbstractFileEngine::CanonicalPathName);
644}
645
656{
657 Q_D(const QFileInfo);
658 if (d->isDefaultConstructed)
659 return ""_L1;
660 return d->fileEntry.path();
661}
662
685{
686 Q_D(const QFileInfo);
687 if (d->isDefaultConstructed)
688 return true;
689 if (d->fileEngine == nullptr)
690 return d->fileEntry.isRelative();
691 return d->fileEngine->isRelativePath();
692}
693
702{
705 return false;
706
708 return true;
709}
710
719{
720 Q_D(const QFileInfo);
721 if (d->isDefaultConstructed)
722 return false;
723 if (d->fileEngine == nullptr) {
724 if (!d->cache_enabled || !d->metaData.hasFlags(QFileSystemMetaData::ExistsAttribute))
726 return d->metaData.exists();
727 }
728 return d->getFileFlags(QAbstractFileEngine::ExistsFlag);
729}
730
744{
745 if (path.isEmpty())
746 return false;
749 // Expensive fallback to non-QFileSystemEngine implementation
751 return QFileInfo(new QFileInfoPrivate(entry, data, std::move(engine))).exists();
752
754 return data.exists();
755}
756
763{
764 Q_D(QFileInfo);
765 d->clear();
766}
767
775{
776 Q_D(const QFileInfo);
777 if (d->isDefaultConstructed)
778 return ""_L1;
779 return d->fileEntry.filePath();
780}
781
790
793
797{
798 Q_D(const QFileInfo);
799 if (d->isDefaultConstructed)
800 return ""_L1;
801 if (!d->fileEngine)
802 return d->fileEntry.fileName();
803 return d->fileEngine->fileName(QAbstractFileEngine::BaseName);
804}
805
819{
820 Q_D(const QFileInfo);
821 if (d->isDefaultConstructed)
822 return ""_L1;
823 return d->getFileName(QAbstractFileEngine::BundleName);
824}
825
843{
844 Q_D(const QFileInfo);
845 if (d->isDefaultConstructed)
846 return ""_L1;
847 if (!d->fileEngine)
848 return d->fileEntry.baseName();
849 return QFileSystemEntry(d->fileEngine->fileName(QAbstractFileEngine::BaseName)).baseName();
850}
851
864{
865 Q_D(const QFileInfo);
866 if (d->isDefaultConstructed)
867 return ""_L1;
868 if (!d->fileEngine)
869 return d->fileEntry.completeBaseName();
870 const QString fileEngineBaseName = d->fileEngine->fileName(QAbstractFileEngine::BaseName);
871 return QFileSystemEntry(fileEngineBaseName).completeBaseName();
872}
873
886{
887 Q_D(const QFileInfo);
888 if (d->isDefaultConstructed)
889 return ""_L1;
890 return d->fileEntry.completeSuffix();
891}
892
909{
910 Q_D(const QFileInfo);
911 if (d->isDefaultConstructed)
912 return ""_L1;
913 return d->fileEntry.suffix();
914}
915
916
937{
938 Q_D(const QFileInfo);
939 return QDir(d->fileEntry.path());
940}
941
951{
952 return QDir(absolutePath());
953}
954
967{
968 Q_D(const QFileInfo);
969 return d->checkAttribute<bool>(
971 [d]() { return d->metaData.isReadable(); },
972 [d]() { return d->getFileFlags(QAbstractFileEngine::ReadUserPerm); });
973}
974
987{
988 Q_D(const QFileInfo);
989 return d->checkAttribute<bool>(
991 [d]() { return d->metaData.isWritable(); },
992 [d]() { return d->getFileFlags(QAbstractFileEngine::WriteUserPerm); });
993}
994
1000
1003
1007{
1008 Q_D(const QFileInfo);
1009 return d->checkAttribute<bool>(
1011 [d]() { return d->metaData.isExecutable(); },
1012 [d]() { return d->getFileFlags(QAbstractFileEngine::ExeUserPerm); });
1013}
1014
1028{
1029 Q_D(const QFileInfo);
1030 return d->checkAttribute<bool>(
1032 [d]() { return d->metaData.isHidden(); },
1033 [d]() { return d->getFileFlags(QAbstractFileEngine::HiddenFlag); });
1034}
1035
1050{
1051 Q_D(const QFileInfo);
1052 if (d->isDefaultConstructed)
1053 return false;
1054 if (d->fileEngine == nullptr)
1055 return true;
1056 return d->getFileFlags(QAbstractFileEngine::LocalDiskFlag);
1057}
1058
1070{
1071 Q_D(const QFileInfo);
1072 return d->checkAttribute<bool>(
1074 [d]() { return d->metaData.isFile(); },
1075 [d]() { return d->getFileFlags(QAbstractFileEngine::FileType); });
1076}
1077
1089{
1090 Q_D(const QFileInfo);
1091 return d->checkAttribute<bool>(
1093 [d]() { return d->metaData.isDirectory(); },
1094 [d]() { return d->getFileFlags(QAbstractFileEngine::DirectoryType); });
1095}
1096
1097
1108{
1109 Q_D(const QFileInfo);
1110 return d->checkAttribute<bool>(
1112 [d]() { return d->metaData.isBundle(); },
1113 [d]() { return d->getFileFlags(QAbstractFileEngine::BundleType); });
1114}
1115
1135
1138
1142{
1143 Q_D(const QFileInfo);
1144 return d->checkAttribute<bool>(
1146 [d]() { return d->metaData.isLegacyLink(); },
1147 [d]() { return d->getFileFlags(QAbstractFileEngine::LinkType); });
1148}
1149
1171{
1172 Q_D(const QFileInfo);
1173 return d->checkAttribute<bool>(
1175 [d]() { return d->metaData.isLink(); },
1176 [d]() { return d->getFileFlags(QAbstractFileEngine::LinkType); });
1177}
1178
1197{
1198 Q_D(const QFileInfo);
1199 return d->checkAttribute<bool>(
1201 [d]() { return d->metaData.isLnkFile(); },
1202 [d]() { return d->getFileFlags(QAbstractFileEngine::LinkType); });
1203}
1204
1221{
1222 Q_D(const QFileInfo);
1223 return d->checkAttribute<bool>(
1225 [d]() { return d->metaData.isAlias(); },
1226 [d]() { return d->getFileFlags(QAbstractFileEngine::LinkType); });
1227}
1228
1241{
1242 Q_D(const QFileInfo);
1243 return d->checkAttribute<bool>(
1245 [d]() { return d->metaData.isJunction(); },
1246 [d]() { return d->getFileFlags(QAbstractFileEngine::LinkType); });
1247}
1248
1255{
1256 Q_D(const QFileInfo);
1257 if (d->isDefaultConstructed)
1258 return false;
1259 if (d->fileEngine == nullptr) {
1260 if (d->fileEntry.isRoot()) {
1261#if defined(Q_OS_WIN)
1262 //the path is a drive root, but the drive may not exist
1263 //for backward compatibility, return true only if the drive exists
1264 if (!d->cache_enabled || !d->metaData.hasFlags(QFileSystemMetaData::ExistsAttribute))
1266 return d->metaData.exists();
1267#else
1268 return true;
1269#endif
1270 }
1271 return false;
1272 }
1273 return d->getFileFlags(QAbstractFileEngine::RootFlag);
1274}
1275
1290{
1291 Q_D(const QFileInfo);
1292 if (d->isDefaultConstructed)
1293 return ""_L1;
1294 return d->getFileName(QAbstractFileEngine::AbsoluteLinkTarget);
1295}
1296
1309{
1310 Q_D(const QFileInfo);
1311 if (d->isDefaultConstructed)
1312 return {};
1313 return d->getFileName(QAbstractFileEngine::RawLinkPath);
1314}
1315
1331{
1332 Q_D(const QFileInfo);
1333 if (d->isDefaultConstructed)
1334 return ""_L1;
1335 return d->getFileName(QAbstractFileEngine::JunctionName);
1336}
1337
1352{
1353 Q_D(const QFileInfo);
1354 if (d->isDefaultConstructed)
1355 return ""_L1;
1356 return d->getFileOwner(QAbstractFileEngine::OwnerUser);
1357}
1358
1370{
1371 Q_D(const QFileInfo);
1372 return d->checkAttribute(uint(-2),
1374 [d]() { return d->metaData.userId(); },
1375 [d]() { return d->fileEngine->ownerId(QAbstractFileEngine::OwnerUser); });
1376}
1377
1391{
1392 Q_D(const QFileInfo);
1393 if (d->isDefaultConstructed)
1394 return ""_L1;
1395 return d->getFileOwner(QAbstractFileEngine::OwnerGroup);
1396}
1397
1409{
1410 Q_D(const QFileInfo);
1411 return d->checkAttribute(uint(-2),
1413 [d]() { return d->metaData.groupId(); },
1414 [d]() { return d->fileEngine->ownerId(QAbstractFileEngine::OwnerGroup); });
1415}
1416
1435bool QFileInfo::permission(QFile::Permissions permissions) const
1436{
1437 Q_D(const QFileInfo);
1438 // the QFileSystemMetaData::MetaDataFlag and QFile::Permissions overlap, so just cast.
1439 auto fseFlags = QFileSystemMetaData::MetaDataFlags::fromInt(permissions.toInt());
1440 auto feFlags = QAbstractFileEngine::FileFlags::fromInt(permissions.toInt());
1441 return d->checkAttribute<bool>(
1442 fseFlags,
1443 [=]() { return (d->metaData.permissions() & permissions) == permissions; },
1444 [=]() {
1445 return d->getFileFlags(feFlags) == uint(permissions.toInt());
1446 });
1447}
1448
1458QFile::Permissions QFileInfo::permissions() const
1459{
1460 Q_D(const QFileInfo);
1461 return d->checkAttribute<QFile::Permissions>(
1463 [d]() { return d->metaData.permissions(); },
1464 [d]() {
1465 return QFile::Permissions(d->getFileFlags(QAbstractFileEngine::PermsMask) & QAbstractFileEngine::PermsMask);
1466 });
1467}
1468
1469
1479{
1480 Q_D(const QFileInfo);
1481 return d->checkAttribute<qint64>(
1483 [d]() { return d->metaData.size(); },
1484 [d]() {
1485 if (!d->getCachedFlag(QFileInfoPrivate::CachedSize)) {
1486 d->setCachedFlag(QFileInfoPrivate::CachedSize);
1487 d->fileSize = d->fileEngine->size();
1488 }
1489 return d->fileSize;
1490 });
1491}
1492
1626#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED)
1643}
1644#endif
1645
1650
1656
1667{
1668 Q_D(const QFileInfo);
1669 QFileSystemMetaData::MetaDataFlags flag;
1670 switch (time) {
1673 break;
1676 break;
1679 break;
1682 break;
1683 }
1684
1685 auto fsLambda = [d, time]() { return d->metaData.fileTime(time); };
1686 auto engineLambda = [d, time]() { return d->getFileTime(time); };
1687 const auto dt =
1688 d->checkAttribute<QDateTime>(flag, std::move(fsLambda), std::move(engineLambda));
1689 return dt.toTimeZone(tz);
1690}
1691
1695QFileInfoPrivate* QFileInfo::d_func()
1696{
1697 return d_ptr.data();
1698}
1699
1706{
1707 Q_D(const QFileInfo);
1708 return d->cache_enabled;
1709}
1710
1724{
1725 Q_D(QFileInfo);
1726 d->cache_enabled = enable;
1727}
1728
1740{
1741 Q_D(QFileInfo);
1743}
1744
1752#ifndef QT_NO_DEBUG_STREAM
1754{
1755 QDebugStateSaver saver(dbg);
1756 dbg.nospace();
1757 dbg.noquote();
1758 dbg << "QFileInfo(" << QDir::toNativeSeparators(fi.filePath()) << ')';
1759 return dbg;
1760}
1761#endif
1762
\inmodule QtCore \reentrant
FileOwner
\value OwnerUser The user who owns the file.
\inmodule QtCore\reentrant
Definition qdatetime.h:283
QDateTime toTimeZone(const QTimeZone &toZone) const
\inmodule QtCore
\inmodule QtCore
\inmodule QtCore
Definition qdir.h:20
QString filePath(const QString &fileName) const
Returns the path name of a file in the directory.
Definition qdir.cpp:778
static QString toNativeSeparators(const QString &pathName)
Definition qdir.cpp:929
\inmodule QtCore
Definition qfiledevice.h:32
@ FileMetadataChangeTime
Definition qfiledevice.h:60
@ FileModificationTime
Definition qfiledevice.h:61
bool const isDefaultConstructed
QFileSystemMetaData metaData
QDateTime & getFileTime(QFile::FileTime) const
std::unique_ptr< QAbstractFileEngine > const fileEngine
QDateTime fileTimes[4]
uint getFileFlags(QAbstractFileEngine::FileFlags) const
Definition qfileinfo.cpp:99
void clearFlags() const
void setCachedFlag(uint c) const
QString getFileOwner(QAbstractFileEngine::FileOwner own) const
Definition qfileinfo.cpp:75
QString fileOwners[2]
bool getCachedFlag(uint c) const
QFileSystemEntry fileEntry
void refresh()
Refreshes the information about the file system entry this QFileInfo refers to, that is,...
bool isSymLink() const
bool isNativePath() const
QString baseName() const
Returns the base name of the file without the path.
bool isBundle() const
bool isSymbolicLink() const
Returns true if this object points to a symbolic link; otherwise returns false.
QString completeSuffix() const
Returns the complete suffix (extension) of the file.
QString symLinkTarget() const
QString suffix() const
Returns the suffix (extension) of the file.
~QFileInfo()
Destroys the QFileInfo and frees its resources.
bool makeAbsolute()
If the file system entry's path is relative, this method converts it to an absolute path and returns ...
QFileInfo & operator=(const QFileInfo &fileinfo)
Move-assigns other to this QFileInfo instance.
uint groupId() const
Returns the id of the group the file belongs to.
bool isRoot() const
Returns true if the object points to a directory or to a symbolic link to a directory,...
void stat()
Reads all attributes from the file system.
void setCaching(bool on)
If enable is true, enables caching of file information.
QString fileName() const
QString bundleName() const
bool isExecutable() const
void setFile(const QString &file)
QString absoluteFilePath() const
QString readSymLink() const
bool isFile() const
Returns true if this object points to a file or to a symbolic link to a file.
QString canonicalPath() const
Returns the file system entry's canonical path (excluding the entry's name), i.e.
QString completeBaseName() const
Returns the complete base name of the file without the path.
QFileInfo()
Constructs an empty QFileInfo object that doesn't refer to any file system entry.
bool isAlias() const
Returns true if this object points to an alias; otherwise returns false.
QDateTime fileTime(QFile::FileTime time) const
bool isDir() const
Returns true if this object points to a directory or to a symbolic link to a directory.
QString owner() const
Returns the owner of the file.
QSharedDataPointer< QFileInfoPrivate > d_ptr
Definition qfileinfo.h:175
QString absolutePath() const
Returns the absolute path of the file system entry this QFileInfo refers to, excluding the entry's na...
bool isWritable() const
Returns true if the user can write to the file system entry this QFileInfo refers to; otherwise retur...
uint ownerId() const
Returns the id of the owner of the file.
qint64 size() const
Returns the file size in bytes.
QString junctionTarget() const
QString canonicalFilePath() const
Returns the file system entry's canonical path, including the entry's name, that is,...
QDir absoluteDir() const
Returns a QDir object representing the absolute path of the parent directory of the file system entry...
QDir dir() const
Returns a QDir object representing the path of the parent directory of the file system entry that thi...
bool isHidden() const
Returns true if the file system entry this QFileInfo refers to is ‘hidden’; otherwise returns false.
bool caching() const
Returns true if caching is enabled; otherwise returns false.
bool isRelative() const
Returns true if the file system entry's path is relative, otherwise returns false (that is,...
bool permission(QFile::Permissions permissions) const
Tests for file permissions.
QString path() const
Returns the path of the file system entry this QFileInfo refers to, excluding the entry's name.
bool isShortcut() const
Returns true if this object points to a shortcut; otherwise returns false.
bool isJunction() const
QString filePath() const
Returns the path of the file system entry this QFileInfo refers to; the path may be absolute or relat...
bool exists() const
Returns true if the file system entry this QFileInfo refers to exists; otherwise returns false.
bool isReadable() const
Returns true if the user can read the file system entry this QFileInfo refers to; otherwise returns f...
QFile::Permissions permissions() const
Returns the complete OR-ed together combination of QFile::Permissions for the file.
QString group() const
Returns the group of the file.
static QFileSystemEntry getLinkTarget(const QFileSystemEntry &link, QFileSystemMetaData &data)
static QFileSystemEntry canonicalName(const QFileSystemEntry &entry, QFileSystemMetaData &data)
static QFileSystemEntry getRawLinkPath(const QFileSystemEntry &link, QFileSystemMetaData &data)
static bool fillMetaData(const QFileSystemEntry &entry, QFileSystemMetaData &data, QFileSystemMetaData::MetaDataFlags what)
static QString bundleName(const QFileSystemEntry &)
static std::unique_ptr< QAbstractFileEngine > createLegacyEngine(QFileSystemEntry &entry, QFileSystemMetaData &data)
static QFileSystemEntry getJunctionTarget(const QFileSystemEntry &link, QFileSystemMetaData &data)
static QFileSystemEntry absoluteName(const QFileSystemEntry &entry)
static QString resolveUserName(const QFileSystemEntry &entry, QFileSystemMetaData &data)
static QString resolveGroupName(const QFileSystemEntry &entry, QFileSystemMetaData &data)
static bool isCaseSensitive()
Q_AUTOTEST_EXPORT QString baseName() const
Q_AUTOTEST_EXPORT QString completeBaseName() const
Q_AUTOTEST_EXPORT bool isRelative() const
Q_AUTOTEST_EXPORT QString filePath() const
QString fileName() const override
Returns the name set by setFileName() or to the QFile constructors.
Definition qfile.cpp:277
const T * constData() const noexcept
Returns a const pointer to the shared data object.
Definition qshareddata.h:51
T * data()
Returns a pointer to the shared data object.
Definition qshareddata.h:47
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
int compare(const QString &s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition qstring.cpp:6664
\inmodule QtCore
Definition qtimezone.h:26
Combined button and popup list for selecting options.
CaseSensitivity
@ CaseInsensitive
@ CaseSensitive
QDebug operator<<(QDebug dbg, const QFileInfo &fi)
bool comparesEqual(const QFileInfo &lhs, const QFileInfo &rhs)
return ret
#define QT_IMPL_METATYPE_EXTERN(TYPE)
Definition qmetatype.h:1390
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLbitfield flags
GLboolean enable
GLuint name
GLbyte GLbyte tz
GLuint entry
GLsizei const GLchar *const * path
GLfloat GLfloat p
[1]
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
unsigned int uint
Definition qtypes.h:34
long long qint64
Definition qtypes.h:60
QFile file
[0]
QString dir
[11]
QStringList fileNames
[4]
QNetworkRequest request(url)
QJSEngine engine
[0]