【例】(简单)(CH901)建立基于控制台工程,使用QFile类读写文本文件。
实现步骤如下。
(1)建立一个工程。选择“文件”→“新建文件或项目…”菜单项,在弹出的对话框中选择“项目”组下的“Application”→“ Qt Console Application”菜单项,单击“Choose…”按钮。
(2)在弹出的对话框中对该工程进行命名并选择保存工程的路径,这里将工程命名为“TextFile”,单击“下一步”按钮,再次单击“下一步”按钮,最后单击“完成”按钮,完成该文件工程的建立。
(3)源文件“main.cpp”的具体实现代码如下:
#include
#include
#include
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QFile file("textFile1.txt"); //(a)
if(file.open(QIODevice::ReadOnly)) //(b)
{
char buffer[2048];
qint64 lineLen = file.readLine(buffer,sizeof(buffer)); //(c)
if(lineLen!=-1) //(d)
{
qDebug()<<buffer;
}
}
return a.exec();
}
(4)选择“构建”→“构建项目" TextFile "”菜单项,首先编辑本例所用的文本文件“textFile1.txt”,保存在项目D:\Qt\CH9\CH901\build-TextFile-Desktop_Qt_5_8_0_MinGW_32bit-Debug目录下,然后运行程序,运行结果如图9.1所示。
【例】(简单)(CH902)建立基于控制台的工程,使用QTextStream类读写文本文件。
(1)源文件“main.cpp”的具体实现代码如下:
#include
#include
#include
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QFile data("data.txt");
if(data.open(QFile::WriteOnly|QFile::Truncate)) //(a)
{
QTextStream out(&data);
out<<QObject::tr("score:")<<qSetFieldWidth(10)<<left<<90<< endl; //(b)
}
return a.exec();
}
其中,
(a) if(data.open(QFile::WriteOnly|QFile::Truncate)):参数QFile::Truncate表示将原来文件中的内容清空。输出时将格式设为左对齐,占10个字符位置。
(b) out<
其中,left操作符是QTextStream定义的类似于中的流操作符。QTextStream还提供了其他一些流操作符,见表9.2。
(2)运行此程序后,可以看到在项目的D:\Qt\CH9\CH902\build-TextFile2-Desktop_Qt_5_8_0_MinGW_32bit-Debug文件夹下自动建立了一个文本文件“data.txt”,打开后看到的内容如图9.2所示。
【例】(简单)(CH903)使用QDataStream读写二进制文件。
(1)头文件“mainwindow.h”的具体代码如下:
#include
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
void fileFun();
};
(2)源文件“mainwindow.cpp”的具体代码如下:
#include "mainwindow.h"
#include
#include
#include
#include
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
fileFun();
}
函数fileFun()完成主要功能,其具体代码如下:
void MainWindow::fileFun()
{
/*将二进制数据写到数据流 */ //(a)
QFile file("binary.dat");
file.open(QIODevice::WriteOnly | QIODevice::Truncate);
QDataStream out(&file); //将数据序列化
out << QString(tr("周何骏:")); //字符串序列化
out << QDate::fromString("1996/09/25", "yyyy/MM/dd");
out << (qint32)21; //整数序列化
file.close();
/*从文件中读取数据 */ //(b)
file.setFileName("binary.dat");
if(!file.open(QIODevice::ReadOnly))
{
qDebug()<< "error!";
return;
}
QDataStream in(&file); //从文件中读出数据
QString name;
QDate birthday;
qint32 age;
in >> name >> birthday >> age; //获取字符串和整数
qDebug() << name << birthday << age;
file.close();
}
【例】(难度一般)(CH904)得到一个文件的大小和所在的目录路径。
源文件“main.cpp”的具体代码。
运行结果如图9.4所示。
本例项目编译后生成的文件所在的目录是:
D:/Qt/CH9/CH904/build-dirProcess-Desktop_Qt_5_8_0_MinGW_32bit-Debug
该目录下debug文件夹大小为801KB,release文件夹大小为0B(空),编译生成的整个目录的总大小为865KB。
【例】(难度一般)(CH905)文件系统的浏览。
创建工程FileView.pro,具体内容如下。
(1)在头文件“fileview.h”中,类FileView继承自QDialog类,具体代码。
(2)源文件“fileview.cpp”的具体代码。
槽函数slotShow()实现了显示目录dir下的所有文件,具体内容如下:
void FileView::slotShow(QDir dir)
{
QStringList string;
string<<"*";
QFileInfoList list=dir.entryInfoList(string,QDir::AllEntries,QDir:: DirsFirst); //(a)
showFileInfoList(list);
}
其中,
(a) QFileInfoList list=dir.entryInfoList(string,QDir::AllEntries,QDir:: DirsFirst):QDir的entryInfoList()方法是按照某种过滤方式获得目录下的文件列表。其函数原型如下:
QFileInfoList QDir::entryInfoList
(
const QStringList &nameFilters,
//此参数指定了文件名的过滤方式,如“*”,“.tar.gz”
Filters filters=NoFilter,
//此参数指定了文件属性的过滤方式,如目录、文件、读写属性等
SortFlags sort=NoSort
//此参数指定了列表的排序情况
)const
其中,QDir::Filter定义了一系列的过滤方式,见表9.3。
QDir::SortFlag定义了一系列排序方式,见表9.4。
函数showFileInfoList()实现了用户可以双击浏览器中显示的目录进入下一级目录,或单击“…”返回上一级目录,顶部的编辑框显示当前所在的目录路径,列表中显示该目录下的所有文件。其具体代码。
槽函数slotDirShow()根据用户的选择显示下一级目录的所有文件。其具体实现代码内容如下:
void FileView::slotDirShow(QListWidgetItem * item)
{
QString str=item->text(); //将下一级的目录名保存在str中
QDir dir; //定义一个QDir对象
dir.setPath(fileLineEdit->text()); //设置QDir对象的路径为当前目录路径
dir.cd(str) //根据下一级目录名重新设置QDir对象的路径
fileLineEdit->setText(dir.absolutePath()); //(a)
slotShow(dir); //显示当前目录下的所有文件
}
【例】(简单)(CH906)利用QFileinfo类获得文件信息,如图9.6所示。
工程FileInfo.pro的具体内容如下。
(1)在头文件“fileinfo.h”中,类FileInfo继承自QDialog类,此类中声明了用到的各种相关控件和函数,其具体内容。
(2)源文件“fileinfo.cpp”的具体内容。
槽函数slotFile()完成通过标准文件对话框获得所需要文件的文件名功能,其具体内容如下:
void FileInfo::slotFile()
{
QString fileName = QFileDialog::getOpenFileName(this,"打开","/", "files (*)");
fileNameLineEdit->setText(fileName);
}
槽函数slotGet()通过QFileInfo获得具体的文件信息,其具体内容。
(3)运行结果如图9.6所示。
【例】(简单)(CH907)监视指定目录功能,介绍如何使用QFileSystemWatcher。
工程fileWatcher.pro的具体内容如下:
(1)在头文件“watcher.h”中,类Watcher继承自QWidget类,其具体内容如下:
#include
#include
#include
class Watcher : public QWidget
{
Q_OBJECT
public:
Watcher(QWidget *parent = 0);
~Watcher();
public slots:
void directoryChanged(QString path);
private:
QLabel *pathLabel;
QFileSystemWatcher fsWatcher;
};
(2)源文件“watcher.cpp”的具体内容。
响应函数directoryChanged()使用消息对话框提示用户目录发生了改变,具体实现代码如下:
void Watcher::directoryChanged(QString path)
{
QMessageBox::information(NULL,tr("目录发生变化"),path);
}
Qt5开发及实例_CH901.rar
Qt5开发及实例_CH902.rar
Qt5开发及实例_CH903.rar
Qt5开发及实例_CH904.rar
Qt5开发及实例_CH905.rar
Qt5开发及实例_CH906.rar
Qt5开发及实例_CH907.rar