QFile Class

QFile 类提供了一个读取和写入文件的接口。更多

头文件 #include <QFile>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
继承: QFileDevice
继承于:

QTemporaryFile

注意:该类中的所有函数都是可重入的

公共函数

QFile()
QFile(QObject *parent)
QFile(const QString &name)
(since 6.0) QFile(const std::filesystem::path &name)
QFile(const QString &name, QObject *parent)
(since 6.0) QFile(const std::filesystem::path &name, QObject *parent)
virtual ~QFile()
bool copy(const QString &newName)
(since 6.0) bool copy(const std::filesystem::path &newName)
bool exists() const
(since 6.0) std::filesystem::path filesystemFileName() const
(since 6.3) std::filesystem::path filesystemSymLinkTarget() const
bool link(const QString &linkName)
(since 6.0) bool link(const std::filesystem::path &newName)
bool moveToTrash()
(since 6.3) bool open(QIODeviceBase::OpenMode mode, QFileDevice::Permissions permissions)
bool open(FILE *fh, QIODeviceBase::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)
bool open(int fd, QIODeviceBase::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)
bool remove()
bool rename(const QString &newName)
(since 6.0) bool rename(const std::filesystem::path &newName)
void setFileName(const QString &name)
(since 6.0) void setFileName(const std::filesystem::path &name)
QString symLinkTarget() const

重新实现的公共函数

virtual QString fileName() const override
virtual bool open(QIODeviceBase::OpenMode mode) override
virtual QFileDevice::Permissions permissions() const override
virtual bool resize(qint64 sz) override
virtual bool setPermissions(QFileDevice::Permissions permissions) override
virtual qint64 size() const override

静态公共成员

bool copy(const QString &fileName, const QString &newName)
QString decodeName(const QByteArray &localFileName)
QString decodeName(const char *localFileName)
QByteArray encodeName(const QString &fileName)
bool exists(const QString &fileName)
(since 6.3) std::filesystem::path filesystemSymLinkTarget(const std::filesystem::path &fileName)
bool link(const QString &fileName, const QString &linkName)
bool moveToTrash(const QString &fileName, QString *pathInTrash = nullptr)
QFileDevice::Permissions permissions(const QString &fileName)
(since 6.0) QFileDevice::Permissions permissions(const std::filesystem::path &filename)
bool remove(const QString &fileName)
bool rename(const QString &oldName, const QString &newName)
bool resize(const QString &fileName, qint64 sz)
bool setPermissions(const QString &fileName, QFileDevice::Permissions permissions)
(since 6.0) bool setPermissions(const std::filesystem::path &filename, QFileDevice::Permissions permissionSpec)
(since 6.9) bool supportsMoveToTrash()
QString symLinkTarget(const QString &fileName)

详细说明

QFile 是一种 I/O 设备,用于读写文本和二进制文件及资源。QFile 可以单独使用,也可以与QTextStreamQDataStream 一起使用。

文件名通常在构造函数中传递,但也可以随时使用setFileName() 进行设置。无论操作系统如何,QFile 都希望文件分隔符是"/"。不支持使用其他分隔符(如 '\')。

你可以使用exists() 检查文件是否存在,使用remove() 删除文件。(更高级的文件系统相关操作由QFileInfoQDir 提供)。

文件用open() 打开,用close() 关闭,用flush() 刷新。数据通常使用QDataStreamQTextStream 读取和写入,但也可以调用QIODevice 继承的函数read(),readLine(),readAll(),write() 。QFile 还继承了getChar() 、putChar() 和ungetChar() 函数,这些函数一次只能处理一个字符。

文件大小由size() 返回。您可以使用pos() 获取当前文件位置,或使用seek() 移动到新的文件位置。如果已到达文件末尾,atEnd() 将返回true

直接读取文件

下面的示例逐行读取文本文件:

    QFile file("in.txt");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return;

    while (!file.atEnd()) {
        QByteArray line = file.readLine();
        process_line(line);
    }

传给open() 的Text 标志告诉 Qt 将 Windows 风格的行结束符("\r\n")转换为 C++ 风格的结束符("\n")。默认情况下,QFile 假定为二进制,即不对文件中存储的字节执行任何转换。

使用流读取文件

下一个示例使用QTextStream 逐行读取文本文件:

    QFile file("in.txt");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return;

    QTextStream in(&file);
    while (!in.atEnd()) {
        QString line = in.readLine();
        process_line(line);
    }

QTextStream 它将磁盘上存储的 8 位数据转换为 16 位 Unicode 。默认情况下,它假定文件是以 UTF-8 编码的。可以使用 () 进行更改。QString QTextStream::setEncoding

要写入文本,我们可以使用操作符<<(),它可以重载,左边是QTextStream ,右边是各种数据类型(包括QString ):

    QFile file("out.txt");
    if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
        return;

    QTextStream out(&file);
    out << "The magic number is: " << 49 << "\n";

QDataStream 与此类似,您可以使用 operator<<() 写入数据,然后使用 operator>>() 读回数据。详情请查看类文档。

信号

与其他QIODevice 实现(如QTcpSocket )不同,QFile 不会发出aboutToClose(),bytesWritten() 或readyRead() 信号。这一实现细节意味着 QFile 不适合读写某些类型的文件,如 Unix 平台上的设备文件。

特定平台问题

与 I/O 相关的 Qt API使用基于 UTF-16 的 QStrings 来表示文件路径。然而,标准 C++ API (<cstdio><iostream>) 或特定平台的 API 通常需要 8 位编码路径。您可以使用encodeName() 和decodeName() 在这两种表示法之间进行转换。

在 Unix 上,有一些特殊的系统文件(例如/proc 中的文件),对于这些文件,size() 将始终返回 0,但您仍然可以从此类文件中读取更多数据;这些数据是在您调用read() 后直接生成的。但在这种情况下,您不能使用atEnd() 来确定是否有更多数据可读(因为atEnd() 会对声称大小为 0 的文件返回 true)。相反,您应该调用readAll() 或反复调用read() 或readLine() 直到无法读取更多数据。下一个示例使用QTextStream 逐行读取/proc/modules

    QFile file("/proc/modules");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return;

    QTextStream in(&file);
    QString line = in.readLine();
    while (!line.isNull()) {
        process_line(line);
        line = in.readLine();
    }

Unix 系统和 Windows 系统对文件权限的处理方式不同。在 Unix-like 系统的非writable 目录中,无法创建文件。在 Windows 系统中,情况并非总是如此,例如,"我的文档 "目录通常是不可写的,但仍有可能在其中创建文件。

Qt 对文件权限的理解是有限的,这尤其影响到QFile::setPermissions() 函数。在 Windows 上,Qt 只会设置传统的只读标志,而且只有在没有传递 Write* 标志时才会这样做。Qt 不会处理访问控制列表(ACL),这使得该函数对 NTFS 卷基本无用。对于使用 VFAT 文件系统的 U 盘,该功能可能仍然有用。POSIX ACL 也不会被处理。

在安卓系统上,处理内容 URI 时会受到一些限制:

另请参阅 QTextStream,QDataStream,QFileInfo,QDirThe Qt Resource System

成员函数文档

QFile::QFile()

构造一个 QFile 对象。

[explicit] QFile::QFile(QObject *parent)

用给定的parent 构建一个新的文件对象。

[explicit] QFile::QFile(const QString &name)

构造一个新的文件对象,用给定的name 表示文件。

注意: 在 Qt 6.8 及以下版本中,为了向后兼容,该构造函数是隐式的。从 Qt 6.9 开始,该构造函数无条件地explicit 。即使在较早版本的 Qt 中,用户也可以通过在包含任何 Qt 头文件之前定义QT_EXPLICIT_QFILE_CONSTRUCTION_FROM_PATH 宏来强制该构造函数为explicit

[explicit, since 6.0] QFile::QFile(const std::filesystem::path &name)

构造一个新的文件对象,用给定的name 表示文件。

注意: 在 Qt 6.8 及以下版本中,为了向后兼容,该构造函数是隐式的。从 Qt 6.9 开始,该构造函数无条件地explicit 。即使在 Qt 的早期版本中,用户也可以通过在包含任何 Qt header 之前定义QT_EXPLICIT_QFILE_CONSTRUCTION_FROM_PATH 宏来强制将此构造函数设置为explicit

该函数在 Qt 6.0 中引入。

QFile::QFile(const QString &name, QObject *parent)

用给定的parent 构建一个新的文件对象,用指定的name 表示文件。

[since 6.0] QFile::QFile(const std::filesystem::path &name, QObject *parent)

用给定的parent 构建一个新的文件对象,以指定的name 表示文件。

该函数在 Qt 6.0 中引入。

[virtual noexcept] QFile::~QFile()

销毁文件对象,必要时关闭文件对象。

bool QFile::copy(const QString &newName)

将名为fileName() 的文件复制到newName

该文件在复制前已关闭。

如果复制的文件是符号链接(symlink),则复制的是其指向的文件,而不是链接本身。除了权限会被复制外,其他文件元数据都不会被复制。

如果复制成功,则返回true ;否则返回false

请注意,如果名称为newName 的文件已经存在,copy() 将返回false 。这意味着QFile 不会覆盖该文件。

注意: 在 Android 上,content 方案 URI 尚不支持此操作。

另请参阅 setFileName() 。

[since 6.0] bool QFile::copy(const std::filesystem::path &newName)

这是一个重载函数。

该函数在 Qt 6.0 中引入。

[static] bool QFile::copy(const QString &fileName, const QString &newName)

这是一个重载函数。

将名为fileName 的文件复制到newName

该文件在复制前已关闭。

如果复制的文件是符号链接(symlink),则复制的是其指向的文件,而不是链接本身。除了权限会被复制外,其他文件元数据都不会被复制。

如果复制成功,则返回true ;否则返回false

请注意,如果名称为newName 的文件已经存在,copy() 将返回false 。这意味着QFile 不会覆盖该文件。

注意: 在 Android 上,content 方案 URI 尚不支持此操作。

另请参阅 rename() 。

[static] QString QFile::decodeName(const QByteArray &localFileName)

这与使用localFileNameQFile::encodeName() 相反。

另请参见 encodeName() 。

[static] QString QFile::decodeName(const char *localFileName)

这是一个重载函数。

返回给定localFileName 的 Unicode 版本。详情请参见encodeName() 。

[static] QByteArray QFile::encodeName(const QString &fileName)

fileName 转换为可在本地 API 中使用的 8 位编码。在 Windows 上,编码是活动的 Windows (ANSI) 代码页中的编码。在其他平台上,这是 UTF-8,在 macOS 上是分解格式 (NFD)。

另请参见 decodeName()。

[static] bool QFile::exists(const QString &fileName)

如果fileName 指定的文件存在,则返回true ;否则返回false

注: 如果fileName 是指向不存在文件的符号链接,则返回 false。

bool QFile::exists() const

这是一个重载函数。

如果fileName() 指定的文件存在,则返回true ;否则返回false

另请参见 fileName() 和setFileName()。

[override virtual] QString QFile::fileName() const

重实现:QFileDevice::fileName() 常量。

返回由setFileName(),rename() 或QFile 构造函数设置的文件名。

另请参阅 setFileName()、rename() 和QFileInfo::fileName()。

[since 6.0] std::filesystem::path QFile::filesystemFileName() const

返回fileName() 作为std::filesystem::path

此函数在 Qt 6.0 中引入。

[since 6.3] std::filesystem::path QFile::filesystemSymLinkTarget() const

返回symLinkTarget() 作为std::filesystem::path

此函数在 Qt 6.3 中引入。

[static, since 6.3] std::filesystem::path QFile::filesystemSymLinkTarget(const std::filesystem::path &fileName)

返回symLinkTarget() 作为fileNamestd::filesystem::path

此函数在 Qt 6.3 中引入。

创建名为linkName 的链接,指向当前由fileName() 指定的文件。链接是什么取决于底层文件系统(Windows 下是快捷方式,Unix 下是符号链接)。如果成功,则返回true ;否则返回false

此函数不会覆盖文件系统中已存在的实体;在这种情况下,link() 将返回 false,并将error() 设置为返回RenameError

注意: 要在 Windows 上创建有效链接,linkName 的文件扩展名必须是.lnk

另请参阅 setFileName() 。

这是一个重载函数。

该函数在 Qt 6.0 中引入。

这是一个重载函数。

创建名为linkName 的链接,指向文件fileName 。链接是什么取决于底层文件系统(Windows 下是快捷方式,Unix 下是符号链接)。如果成功,则返回true ;否则返回false

另请参阅 link() 。

bool QFile::moveToTrash()

fileName() 指定的文件移至垃圾桶。如果成功,则返回true ,并将fileName() 设置为在垃圾箱中可以找到该文件的路径;否则返回false

此函数的运行时间与垃圾文件的大小无关。如果在一个目录中调用此函数,运行时间可能与被清理文件的数量成正比。如果当前fileName() 指向一个符号链接,此函数将把链接移到垃圾桶,可能会破坏链接,而不是链接的目标。

该函数使用 Windows 和 macOS API 在这两个操作系统上执行删除操作。在其他系统(Unix 系统)上,该函数将执行FreeDesktop.org 垃圾箱规范 1.0 版

注意: 在使用 FreeDesktop.org 垃圾桶实现时,如果无法通过文件重命名和硬链接将文件移动到垃圾桶位置,则此函数将失效。如果被扔掉的文件位于卷(挂载点)上,而当前用户没有权限在该卷上创建.Trash 目录,或者文件系统类型或配置异常(如本身不是挂载点的子卷),则会出现这种情况。

注意: 在系统 API 不报告垃圾中文件位置的系统上,一旦文件被移动,fileName() 将被设置为空字符串。在没有垃圾桶的系统中,该函数总是返回false (参见supportsMoveToTrash())。

另请参阅 supportsMoveToTrash()、remove() 和QDir::remove()。

[static] bool QFile::moveToTrash(const QString &fileName, QString *pathInTrash = nullptr)

这是一个重载函数。

fileName 指定的文件移至垃圾桶。如果成功则返回true ,并将pathInTrash (如果提供)设置为可在垃圾箱中找到该文件的路径;否则返回false

此函数的运行时间与垃圾文件的大小无关。如果在一个目录中调用此函数,则运行时间可能与被清理文件的数量成正比。如果当前fileName() 指向一个符号链接,此函数将把链接移到垃圾桶,可能会破坏链接,而不是链接的目标。

该函数使用 Windows 和 macOS API 在这两个操作系统上执行删除操作。在其他系统(Unix 系统)上,该函数将执行FreeDesktop.org 垃圾箱规范 1.0 版

注意: 在使用 FreeDesktop.org 垃圾桶实现时,如果无法通过文件重命名和硬链接将文件移动到垃圾桶位置,则此函数将失效。如果被扔掉的文件位于卷(挂载点)上,而当前用户没有权限在该卷上创建.Trash 目录,或者文件系统类型或配置异常(如本身不是挂载点的子卷),则会出现这种情况。

注意: 在系统 API 不报告垃圾中文件路径的系统中,一旦文件被移动,pathInTrash 将被设置为空字符串。在没有垃圾桶的系统中,此函数总是返回 false。

[override virtual] bool QFile::open(QIODeviceBase::OpenMode mode)

重实现:QIODevice::open(QIODeviceBase::OpenMode mode)。

使用mode 标志打开文件,如果成功则返回true ,否则返回false

mode 的标志必须包括QIODeviceBase::ReadOnly,WriteOnly, 或ReadWrite 。也可能有其他标志,如TextUnbuffered

注意: WriteOnlyReadWrite 模式下,如果相关文件不存在,该函数将尝试创建一个新文件后再打开。在 POSIX 系统中,创建的文件将使用 umask 屏蔽的 0666 模式;在 Windows 系统中,将使用从父级目录继承的权限。在 Android 系统上,文件名的父目录应该有访问权限,否则将无法创建这个不存在的文件。

另请参阅 QT_USE_NODISCARD_FILE_OPENsetFileName()。

[since 6.3] bool QFile::open(QIODeviceBase::OpenMode mode, QFileDevice::Permissions permissions)

这是一个重载函数。

如果文件不存在,而mode 意味着要创建该文件,则会以指定的permissions 创建该文件。

在 POSIX 系统中,实际权限受umask 的值影响。

在 Windows 系统中,权限是通过 ACL 模拟的。当组被授予的权限少于其他组时,这些 ACL 的顺序可能不规范。打开 "属性 "对话框的 "安全 "选项卡时,具有此类权限的文件和目录将产生警告。授予组其他成员所有权限可避免此类警告。

此功能在 Qt 6.3 中引入。

另请参阅 QIODevice::OpenMode,setFileName() 和QT_USE_NODISCARD_FILE_OPEN

bool QFile::open(FILE *fh, QIODeviceBase::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)

这是一个重载函数。

在给定的mode 中打开现有文件句柄fhhandleFlags 可用于指定其他选项。如果成功,则返回true ;否则返回false

举例说明:

#include <stdio.h>

void printError(const char* msg)
{
    QFile file;
    file.open(stderr, QIODevice::WriteOnly);
    file.write(msg, qstrlen(msg));        // write to stderr
    file.close();
}

使用该函数打开QFile 时,close() 的行为受 AutoCloseHandle 标志控制。如果指定了 AutoCloseHandle,且此函数成功执行,则调用close() 关闭所采用的句柄。否则,close() 实际上不会关闭文件,而只会刷新文件。

警告

  1. 如果fh 指的不是常规文件,例如,它是stdin,stdout, 或stderr ,则可能无法seek().size() 返回0 。更多信息,请参阅QIODevice::isSequential() 。
  2. 由于该函数打开文件时不指定文件名,因此不能将QFileQFileInfo 一起使用。

Windows 平台注意事项

fh 在访问文件和其他随机存取设备时,必须以二进制模式(即模式字符串必须包含 "b",如 "rb "或 "wb")打开。如果将 QIODevice::Text 传递给 ,Qt 将翻译行结束字符。顺序设备(如 stdin 和 stdout)不受此限制的影响。mode

要在控制台使用 stdin、stdout 和 stderr 流,需要启用对控制台应用程序的支持。为此,请在应用程序的项目文件中添加以下声明:

CONFIG += console

另请参见 close() 和QT_USE_NODISCARD_FILE_OPEN

bool QFile::open(int fd, QIODeviceBase::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)

这是一个重载函数。

在给定的mode 中打开现有文件描述符fdhandleFlags 可用于指定其他选项。如果成功,则返回true ;否则返回false

使用此函数打开QFile 时,close() 的行为受 AutoCloseHandle 标志控制。如果指定了 AutoCloseHandle,且此函数成功执行,则调用close() 关闭所采用的句柄。否则,close() 实际上不会关闭文件,而只会刷新文件。

警告 如果fd 不是常规文件,例如,它是 0 (stdin)、1 (stdout)或 2 (stderr),则可能无法使用seek() 。在这种情况下,size() 返回0 。更多信息,请参阅QIODevice::isSequential() 。

警告: 由于该函数打开文件时未指明文件名,因此不能将QFileQFileInfo 一起使用。

另请参阅 close() 和QT_USE_NODISCARD_FILE_OPEN

[override virtual] QFileDevice::Permissions QFile::permissions() const

重实现:QFileDevice::permissions() 常量。

另请参见 setPermissions().

[static] QFileDevice::Permissions QFile::permissions(const QString &fileName)

这是一个重载函数。

返回fileName 的 QFile::Permission 的完整 OR-ed together 组合。

[static, since 6.0] QFileDevice::Permissions QFile::permissions(const std::filesystem::path &filename)

这是一个重载函数。

该函数在 Qt 6.0 中引入。

bool QFile::remove()

删除fileName() 指定的文件。如果成功,则返回true ;否则返回false

文件在删除前已关闭。

另请参阅 setFileName() 。

[static] bool QFile::remove(const QString &fileName)

这是一个重载函数。

删除fileName 指定的文件。

如果成功,则返回true ;否则返回false

另请参阅 remove() 。

bool QFile::rename(const QString &newName)

将当前由fileName() 指定的文件重命名为newName 。如果成功,则返回true ;否则返回false

如果名称为newName 的文件已经存在,rename() 将返回false (即QFile 不会覆盖该文件)。

在重命名之前,文件将被关闭。

如果重命名操作失败,Qt XML 会尝试将此文件的内容复制到newName ,然后删除此文件,只保留newName 。如果该复制操作失败或此文件无法删除,则会删除目标文件newName 以恢复旧状态。

另请参阅 setFileName() 。

[since 6.0] bool QFile::rename(const std::filesystem::path &newName)

这是一个重载函数。

该函数在 Qt 6.0 中引入。

[static] bool QFile::rename(const QString &oldName, const QString &newName)

这是一个重载函数。

将文件oldName 重命名为newName 。如果成功,则返回true ;否则返回false

如果名称为newName 的文件已经存在,rename() 将返回false (即QFile 不会覆盖该文件)。

另请参阅 rename() 。

[override virtual] bool QFile::resize(qint64 sz)

重实现:QFileDevice::resize(qint64 sz)。

[static] bool QFile::resize(const QString &fileName, qint64 sz)

这是一个重载函数。

fileName 设置为sz 的大小(字节)。如果调整成功,则返回true ;否则返回 false。如果szfileName 大,新字节数将设为 0;如果sz 比 小,文件将被截断。

警告: 如果文件不存在,此函数可能会失败。

另请参见 resize().

void QFile::setFileName(const QString &name)

设置文件的name 。文件名可以没有路径,也可以是相对路径或绝对路径。

如果文件已经打开,请不要调用此函数。

如果文件名没有路径或有相对路径,使用的路径将是调用 open( ) 时应用程序的当前目录路径。

举例说明

QFile file;
QDir::setCurrent("/tmp");
file.setFileName("readme.txt");
QDir::setCurrent("/home");
file.open(QIODevice::ReadOnly);      // opens "/home/readme.txt" under Unix

请注意,目录分隔符"/"适用于 Qt 支持的所有操作系统。

另请参阅 fileName(),QFileInfo, 和QDir

[since 6.0] void QFile::setFileName(const std::filesystem::path &name)

这是一个重载函数。

该函数在 Qt 6.0 中引入。

[override virtual] bool QFile::setPermissions(QFileDevice::Permissions permissions)

重实现:QFileDevice::setPermissions(QFileDevice::Permissions permissions)。

将文件的权限设置为指定的permissions 。如果成功,则返回true ;如果无法修改权限,则返回false

警告: 此函数不能操作 ACL,这可能会限制其有效性。

另请参阅 permissions() 和setFileName()。

[static] bool QFile::setPermissions(const QString &fileName, QFileDevice::Permissions permissions)

这是一个重载函数。

fileName 文件的权限设置为permissions

[static, since 6.0] bool QFile::setPermissions(const std::filesystem::path &filename, QFileDevice::Permissions permissionSpec)

这是一个重载函数。

该函数在 Qt 6.0 中引入。

[override virtual] qint64 QFile::size() const

重实现:QFileDevice::size() const.

[static, since 6.9] bool QFile::supportsMoveToTrash()

如果 Qt XML 支持在当前操作系统中使用moveToTrash() 函数将文件移至垃圾箱(回收站),则返回true ,否则返回false 。请注意,该函数返回true 并不意味着moveToTrash() 会成功。尤其是,该函数不会检查用户是否在设置中禁用了该功能。

此函数在 Qt 6.9 中引入。

另请参阅 moveToTrash()。

[static] QString QFile::symLinkTarget(const QString &fileName)

返回fileName 指定的符号链接(或 Windows 下的快捷方式)指向的文件或目录的绝对路径,如果fileName 与符号链接不对应,则返回空字符串。

该名称可能不代表现有文件;它只是一个字符串。QFile::exists() 如果符号链接指向一个现有文件,则返回true

QString QFile::symLinkTarget() const

这是一个重载函数。

返回符号链接(或 Windows 下的快捷方式)指向的文件或目录的绝对路径,如果对象不是符号链接,则返回空字符串。

该名称可能不代表现有文件;它只是一个字符串。QFile::exists如果符号链接指向一个现有文件,则 () 返回true

另请参阅 fileName() 和setFileName()。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.