34黑马QT笔记之QFile读文件
1 QFile的作用:
相当于一个虚拟文件,需要与具体文件关联才能操作,一般配合文件对话框的返回值来使用,即getOpenFileName函数。当然,也可以在创建QFile时关联一个不存在的文件路径,保存后自动创建该文件。
2 如何读取一个本地的文件显示到指定控件(一般是文本编辑区)呢?
1)利用文件对话框函数getOpenFileName获取路径。
2)将选择好的文件路径与QFile关联。
3)打开文件。
4)利用read或者readAll或者readLine等等,将数据读取到字节数组QByteArray,然后将其显示在文本编辑区即可。
5)关闭文件。
3 代码:
void MyWidget::on_Mybutton1_clicked()
{
//QFile的作用:相当于一个虚拟文件,需要与具体文件关联才能操作 一般配合文件对话框的返回值来使用 即getOpenFileName函数
//也可以在创建QFile时关联一个不存在的文件路径 保存后自动创建该文件
//1 利用文件对话框获取文件路径
QString path=QFileDialog::getOpenFileName(this,"文件对话框","./..");
if(path.isEmpty())
{
return ; //注意构造函数无返回值 所以不要给它值就可以
}
//2 定义QFile文件并关联
QFile file(path);
//3 打开文件
//与linux一样 只不过linux的open三个参数 将关联与打开合在一起
bool ret=file.open(QIODevice::ReadOnly);
if(ret==false)
{
return ;
}
//4 对文件进行操作
//QFile只能默认显示utf8 显示其他编码需要后面的文本流
QByteArray array=file.readAll();
ui->textEdit->setText(QString(array));
#if 0
//使用readLine:
//若文件还没读到尾 则一行一行读到字节数组中
QByteArray array;
while(file.atEnd()==false)
{
//readLine的默认参数maxSize=0表示以一行的最大字节数来读
//若设定maxSize则表示按设定的字节数来读 并且设定时maxSize不能超过一行的最大字节数
array+=file.readLine(); //不要忘了+
}
ui->textEdit->setText(QString(array));
#endif
//5 关闭QFile文件
file.close();
}
4 了解一下Qt下的一些IO设备:
可以看出Qt下的IO操作基类是QIODevice。我说一下我认识的和Qt常用的。
1)常用的就是QFile,第一点作用已经说了。然后还有QTcpSocket和QUdpSochet,这两个就是相当于Linux下的Tcp连接和Udp连接,他们继承于网络通信的共同抽象类。
2)QBuffer相当于一个缓冲区类。QProcess相当于Linux下的exec函数族,功能类似,可以在程序执行时转去exec设定的外部程序执行。