Qt5中有关于目录和文件的几个重要类

1. 说明

2. QCoreApplication类

3. QDir类

4. QFile类

5. QFileInfo类

6. QTemporaryDir和QTemporaryFile类

7. QFileSystemWatcher类


1. 说明

   本文内容翻译自Qt帮助文档,其中加了一些博主自己的理解,Qt版本为Qt 5.9.7。

2. QCoreApplication类

    QCoreApplication是为无GUI应用提供时间循环的类,是所有应用程序类的基类。对于GUI应用程序,对应的类为QGuiApplication,此类继承自QCoreApplication,它有一重要的子类--QApplication,QApplication为基于QWidget的应用程序提供支持。表2列举了几个QCoreApplication常用的静态成员函数:

表2  QCoreApplication类的常用函数
函数原型功能
[static] QString applicationDirPath()返回应用程序启动路径, 路径后无“/”结尾
[static] QString applicationFilePath()返回应用程序的完整文件名(绝对路径)
[static] QString applicationName()返回应用程序名称,不带路径和后缀
[static] int exec()进入主事件循环并等待直到调用exit()。返回传递给exit()的值(如果通过quit()调用exit(),则返回0)。
[static] void exit(int returnCode = 0)退出应用程序,main函数返回值为returnCode。
[static slot] void quit()继承自QObject,功能相当于调用exit(0)

3. QDir类

    QDir类是Qt用于目录操作的类,其常用成员函数如表3。

表3  QDir类常用成员函数

函数原型

功能

[static] QString rootPath()

返回系统根目录名称。Linux系统通常返回”/”,Windows系统通常返回”C:/”。

[static] QString tempPath()

返回系统临时文件目录名称。如Windows系统通常为”TEMP”或”TMP”环境变量指定的路径,如:”C:/Users/[当前用户名]/AppData/Local/Temp

”。

[static] QString homePath()

返回主目录名称。如Windows系统通常为”C:/Users/[当前用户名]”。

[static] QString currentPath()

返回当前工作目录, 不带”/”结束符。

[static] QString setCurrentPath()

设置当前工作目录。

[static] QFileInfoList drives()

返回系统的根目录列表, Windows系统返回盘符列表。

QString absoluteFilePath(const QString &fileName)

返回当前目录下的fileName文件的带绝对路径的文件名。

QString absolutePath()

返回目录的绝对路径,末尾不带”/”结束符。

QString canonicalPath()

返回目录的规范路径,即不带符号链接或”.””..”冗余。若规范路径不存在,则返回空字符串。

QString filePath(const QString &fileName)

返回目录下的一个文件的目录名。

QString dirName()

返回最后一级目录的名称,若构造QDir对象时,传入的是文件名,则返回带后缀且不带路径的文件名。

bool exists()

判断目录是否存在

QStringList entryList(const QStringList &nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort)

有过滤符和排序方式返回当前目录下的所有文件名,子目录名称...

QStringList entryList(Filters filters = NoFilter, SortFlags sort = NoSort)

返回当前目录下的所有文件名,子目录名称...

bool mkdir(const QString &dirName)

在当前目录下创建名为dirName的子目录。如果调用之前子目录已经存在,则返回false。

bool rmdir(const QString &dirName)

删除dirName指定的目录。

bool remove(const QString &fileName)

删除当前目录下fileName指定的文件。

bool rename(const QString &oldName, const QString &newName)

目录或文件重命名。

bool mkpath(const QString &dirPath)

创建dirPath指定的路径。此函数将创建路径的所有父目录。若调用此函数时,路径已存在,则返回false。

bool rmpath(const QString &dirPath)

删除dirPath指定的路径。这将删除路径指定的所有父目录,前提是它们为空。

void setPath(const QString &path)

设置QDir对象的当前目录。

bool removeRecursively()

删除目录,包括其所有子目录和文件。如果无法删除目录或文件,则继续运行并尝试删除尽可能多的文件和子目录,然后返回false。

如果目录已被删除,则返回true。

 

4. QFile类

    QFile类继承自QFileDevice类,是Qt中文件I/O必不可少的类,表4列出了其常用的成员函数。至于其write,read等函数,则是继承其基类QFileDevice类,具体信息可参考Qt帮助文档。

表4  QFile类常用成员函数

函数原型

功能

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

复制文件fileName到newName。

[static] bool rename(const QString &fileName, const QString &newName)

重命名文件。

[static] bool remove(const QString &fileName)

删除fileName指定的文件。

[static] bool exists(const QString &fileName)

判断文件是否存在。

[static bool setPermissions(const QString &fileName, Permissions permissions)

设置文件的权限。具体权限查看QFileDevice::Permission枚举。

[static] Permissions permissions(const QString &fileName)

返回文件的权限。

bool open(OpenMode mode)

打开文件,打开方式由mode指定。OpneMode的详细信息请查看QIODevice::OpenModeFlag枚举。

void close()

继承自QFileDevice的虚函数,关闭文件。

void setFileName(const QString &name)

设置文件名称,若已调用open()函数打开文件,则不能调用此函数。

QString fileName()

返回setFileName()或构造函数指定的文件名。

bool copy(const QString &newName)

复制文件到newName。

bool rename(const QString &newName)

重命名文件。

bool remove()

删除当前文件。

bool exists()

判断当前文件是否存在。

bool setPermissions(Permissions permissions)

设置当前文件的权限。具体权限查看QFileDevice::Permission枚举。

Permissions permissions()

返回当前文件的权限。

qint64 size()

返回文件的大小,以字节(B)为单位。

5. QFileInfo类

    QFileInfo类提供文件的各种信息。其静态函数只有一个:exists(),用于判断文件是否存在。表5列出了其常用成员函数。

表5   QFileInfo类的常用成员函数

函数原型

功能

[static] bool exists(const QString &file)

判断file指定的文件是否存在。

bool exists()

判断文件是否存在。

void setFile(const QString &file)

void setFile(const QFile &file)

void setFile(const QDir &dir, const QString &file)

设置文件名作为QFileInfo对象操作的文件。使用构造对象时设置亦可。

QString absoluteFilePath()

返回带文件名的绝对路径

QString absolutePath()

返回不带文件名的绝对路径。路径末尾无”/”结束符。

QDir absoluteDir()

返回由absoluteFilePath()构造的QDir类对象。

QString fileName()

返回不带任何路径的文件名。

QString filePath()

返回包含路径(相对路径或绝对路径,取决于构造对象时使用的路径)的文件名。

qint64 size()

返回文件大小,以字节(B)为单位。

QString baseName()

返回文件基名,第一个”.”之前的文件名。不带任何路径。如:”C:/dir/tmp.tar.gz”, 返回”tmp”。

QString completeBaseName()

返回文件基名,最后一个”.”之前的文件名。如:”C:/dir/tmp.tar.gz”, 返回”tmp.tar”。

QString suffix()

返回最后一个”.”之后的后缀。

QString completeSuffix()

返回第一个”.”之后的后缀。

bool isDir()

判断当前对象是否是目录或目录的快捷方式(symbolic link)。

bool isFile()

判断当前对象是否是文件或文件的快捷方式(symbolic link)。

bool isExecutable()

判断当前对象是否是可执行文件。

bool isHidden()

怕段当前对象是否为不可见对象。

bool isSymLink()

判断当前对象是否是快捷方式(symbolic link)。

bool isAbsolute()

判断当前对象是否是绝对路径。

bool isReadable()

判断用户是否可读当前对象。注意:如果是Windows操作系统,且未启用NTFS权限检查,则返回值仅反映文件是否存在。

bool isWriteable()

判断用户是否可写当前对象。注意:如果是Windows操作系统,且未启用NTFS权限检查,则返回值仅反映文件是否标记为只读。

bool makeAbsolute()

如果文件的路径尚未以绝对路径的形式存在,则将其路径转换为绝对路径。返回true表示路径转换成功; 返回false表示路径已经是绝对路径。

QDateTime created()

返回创建文件的日期和时间。在大多数Unix操作系统上,此函数返回上次状态更改的时间。适用于目录和文件。

QDateTime lastModified()

返回最后一次修改的日期和时间。适用于目录和文件。

QDateTime lastRead()

返回最后一次读取的日期和时间。适用于目录和文件。

6. QTemporaryDir和QTemporaryFile类

(1) QTemporaryDir用于操作临时目录,其常用成员如表6-1。

表6-1 QTemporaryDir常用成员函数

函数原型

功能

void setAutoRemove(bool b)

设置是否自动删除。默认启用自动删除功能。

bool autoRemove()

返回是否启用自动删除功能。

QString path(const QString &fileName)

返回创建的临时目录名称。若创建失败,则返回空字符串。

bool isValid()

判断临时目录是否有效。成功创建了临时目录,则返回true,否则返回false。

QString errorString()

如果isValid()返回false,则可用此函数查看错误信息。

bool remove()

删除此临时目录及其所有子目录和文件。

(2)QTemporaryFile继承自QFile类,用于操作临时文件,除了继承自QFile类的成员函数外,表6-2列出了其常用的成员函数。

表6-2  QTemporaryFile常用成员函数

函数原型

功能

void setAutoRemove(bool b)

设置是否自动删除。默认启用自动删除功能。

bool autoRemove()

返回是否启用自动删除功能。

QString fileTemplate()

返回设置的文件模板。默认文件模板被称为qcoreappname.XXXXXX,并放在QDir::tempPath()中。

bool open()

以QIODevice::ReadWrite模式打开文件。

void setFileTemplate(const QString &name)

将文件名的静态部分设置为name。如果文件模板包含“XXXXXX”,将自动替换为文件名的唯一部分,否则将根据指定的静态部分自动确定文件名。如果name包含相对文件路径,则该路径将相对于当前工作目录。如果要使用系统的临时目录,可以使用QDir::tempPath()构造name。

7. QFileSystemWatcher类

 QFileSystemWatcher类用于监听目录和文件。当目录或文件发生改变时(如新建、删除、重命名等)会触发directoryChanged()或fileChanged()信号。表7列出了其常用成员函数和信号。

表7  QFileSystemWatcher常用成员函数

函数原型

功能

bool addPath(const QString &path)

添加一个监听的目录或文件。监视失败的原因通常取决于系统,但可能包括不存在的资源、访问失败或总监视计数限制(如果平台有)。注意:对于可以同时监视的文件和目录的数量,可能存在一个与系统相关的限制。如果达到此限制,则不会监视路径,并返回false。

QStringList addPaths(const QStringList &paths)

添加监听的目录或文件列表。返回值为监听失败的目录或文件列表。

QStringList directories()

返回监听的目录列表。

QStringList files()

返回监听的文件列表。

bool removePath(const QString &path)

移除监听的目录或文件。

QStringList removePaths(const QStringList &paths)

移除监听的目录或文件列表。返回移除失败的目录或文件列表。

[signal] void directoryChanged(const QString &path)

监听的目录发生变化时触发此信号。

[signal] void fileChanged(const QString &path)

监听的文件发生变化时触发此信号。

 

 

Qt Creator 多线程读取文件到程序显示 利用QT Creator多任务读取一个文档到程序里 为了防止直接读取文件里的内容太大而发生卡顿,于是多线程读取将更高效的解决这个问题。 效果图如下: 其中pro文件无需改动,默认就好,头文件h里面的内容为 #ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MyObj; class MyObj : public QObject { Q_OBJECT public: MyObj(); //新的线程 signals: void toLine(QString line); private slots: void doWork(); }; class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void appendText(QString); //定义一个槽 private: Ui::MainWindow *ui; QThread *t; MyObj *obj; }; #endif // MAINWINDOW_H 而MAIN主文件的内容为了防止中文乱码做了如下修改: #include "mainwindow.h" #include #include int main(int argc, char *argv[]) { QApplication a(argc, argv); //设置中文字体 防止乱码 a.setFont(QFont("Microsoft Yahei", 9)); //设置中文编码 #if (QT_VERSION <= QT_VERSION_CHECK(5,0,0)) #if _MSC_VER QTextCodec *codec = QTextCodec::codecForName("GBK"); #else QTextCodec *codec = QTextCodec::codecForName("UTF-8"); #endif QTextCodec::setCodecForLocale(codec); QTextCodec::setCodecForCStrings(codec); QTextCodec::setCodecForTr(codec); #else QTextCodec *codec = QTextCodec::codecForName("UTF-8"); QTextCodec::setCodecForLocale(codec); #endif MainWindow w; w.show(); return a.exec(); } 接下来重点来了,源文件CPP里为 #include "mainwindow.h" #include "ui_mainwindow.h" #include #include #include #include #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); t = new QThread(); //QThread obj = new MyObj(); obj->moveToThread(t); qDebug()<<"main thread:"<<QThread::currentThread(); connect(t,SIGNAL(started()), obj, SLOT(doWork())); connect(obj,SIGNAL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值