文件的读写是很多应用程序具有的功能,甚至某些应用程序就是围绕着某一种格式文件的处 理而开发的,所以文件读写是应用程序开发的一个基本功能。
1 文件目录操作相关的类
Qt为文件和目录操作提供了一些类,利用这些类可以方便地实现一些操作。Qt提供的与文件
和目录操作相关的类包括以下几个。
-
QCoreApplication:用于提取应用程序路径、程序名等文件信息。
-
QFile:除了打开文件操作外,QFile还有复制文件、删除文件等功能。
-
QFileInfo:用于提取文件的信息,包括路径、文件名、后缀等。
-
QDir:用于提取目录或文件信息,获取一个目录下的文件或目录列表,创建或删除目录和 文件,文件重命名等操作。
-
QTemporaryDir和QTemporaryFile:用于创建临时目录和临时文件。
-
QFileSystemWatcher:文件和目录监听类,监听目录下文件的添加、删除等变化,监听文 件修改变化。
这些类基本涵盖了文件操作需要的主要功能,有些功能还在某些类里重复出现,例如QFile 和QDir都具有删除文件、判断文件是否存在的功能。
2 实例概述
2.1 实例功能
实例samp7_3演示前述各种目录与文件操作类的主要功能,图7-3是实例运行时的窗口。窗 口左侧是一个QToolBox组件,分为6组,每一组是一个或两个类的功能演示,在每个组里放置一 些QPushButton按钮,每个按钮主要调用类的某个函数,按钮的标题就是使用的函数的名称。
窗口右侧是显示区,可以选择一个目录、一个文件,然后左侧的功能基本上都是对选择的目 录或文件进行操作,右下方是一个QPlainTextEdit组件,用于显示信息。
2.2 信号发射者信息的获取
每个按钮一般用函数名称作为标题,例如“QFileInfo类”分组里的按钮"baseName()”是要演示QFileInfo的baseName()函数。另外,将Qt帮助文件里的这个函数的基本描述文字复制作为 按钮的ToolTip文字,例如"baseName()"按钮的ToolTip属是“Returns the base name of the file without the path”。
![](https://img-blog.csdnimg.cn/direct/918b10a20b75449186f138cf28ec4f9e.png)
图7-3 实例samp7_3运行时窗口
在按钮被单击时,先显示按钮的标题和ToolTip信息,以便明显地知道按钮演示的功能。例 如,"baseName()”按钮的clicked()槽函数代码如下:
void Dialog::on_pushButton_30_clicked()
{//QFileInfo.basename()
QPushButton *btn = (QPushButton*) sender();
ui->plainTextEdit->appendPlainText(btn->text());
ui->plainTextEdit->appendPlainText(btn->toolTip());
QFileInfo fileInfo(ui->editFile->text());
QString str=fileInfo.baseName();
ui->plainTextEdit->appendPlainText(str+"\n");
}
代码的前3行是用于获取按钮对象,并显示按钮的text和toolTip文字。
这里用到了QObject::sender()函数,该函数用于在槽函数里获取发射信号的对象。因为这个函数是按钮的clicked()信号的槽函数,所以,sender()获取的信号发射对象就是这个按钮。然后将此对象转换为QPushButton类型变量btn,就可以访问btn的text()和toolTip()函数了。
这种方法的优点是没有出现对象的ObjectName,这3行代码可以在任何一个按钮的clicked()信号槽函数里出现。如果是直接用按钮的ObjectName,则每个按钮里的代码里需要修改名称。本实例有几十个按钮,工作量很大,也容易遗漏了修改名称。
对上面的代码还可以进一步优化,因为每个按钮的槽函数里都要重复这3行代码,将其编写为一个函数,然后在按钮的响应代码里调用。优化后的代码如下:
void Di