QT文件基本操作
1.概述
这篇文章介绍一些QT操作文件的基础内容
2.创建项目
首先创建一个普通的widget类型项目,然后使用UI 布局页面,实现一个读取文件内容的功能。
2.1.UI布局
在UI界面添加一个QWideget
容器,然后在容器中分别添加lineText
和pushButton
控件。设置QWideget
容器水平对齐.
在QWideget
容器下面添加textEdit
控件。
3.读取文件内容
3.1.读取文件内容
在widget.cpp
文件中创建一个槽函数和信号,实现点击按钮选择文件,在lineText
控件中显示文件路径,textEdit
界面显示文件内容.
#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
#include <QFileDialog>
#include <QFile>
#include <QTextCodec>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
// 创建按钮的槽和信号,实现点击按钮选择文件,在界面显示文件内容
ui->setupUi(this);
connect(ui->pushButton, &QPushButton::clicked,[=](){
// 使用文件对话框,选择文件
QString path = QFileDialog::getOpenFileName(this,"打开文件","/Users/bruce/Documents/WorkSpace/QtSpace/05_Qfile");
// 设置单行文本框显示文件路径
ui->lineEdit->setText(path);
// 创建文件对象
QFile file(path);
// 设置操作文件方式
file.open(QIODevice::ReadOnly);
// 读取文件内容,QFile默认支持文件格式是UTF-8
QByteArray text = file.readAll();
// 默认utf-8格式在textEdit文本编辑框中显示文件的内容
// ui->textEdit->setText(text);
// 设置格式
QTextCodec * codec = QTextCodec::codecForName("gbk");
// 用设置的gbk格式在textEdit文本编辑框中显示文件的内容
ui->textEdit->setText(codec->toUnicode(text));
// 关闭文件资源
file.close();
});
}
Widget::~Widget()
{
delete ui;
}
实现效果图
3.2.按行读取
QByteArray lineText;
// 读取文件不是结尾一直读取文件内容
while(!file.atEnd())
{
// 按行读取,返回类型是QByteArray
lineText += file.readLine();
}
ui->textEdit->setText(lineText);
// 关闭文件资源
file.close();
4.向文件写内容
// 追加内容方式打开文件
file.open(QIODevice::Append);
// 向文件写入信息
file.write("追加新信息");
file.close();
5.获取文件属性
获取文件属性使用QFileInfo
类,该类提供了获取文件属性的所有方法,查看帮助文档即可获取需要的属性
下面通过一个实例,展示部分文件属性。
#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
#include <QFileDialog>
#include <QFile>
#include <QTextCodec>
#include <QFileInfo>
#include <QDebug>
#include <QDateTime>
// 获取文件属性
QFileInfo fileInfo(path);
qDebug() << "大小" << fileInfo.size() << "后缀名" << fileInfo.suffix() <<"名称" << fileInfo.fileName() << "路径" << fileInfo.path();
// 默认格式输出日期
qDebug() << "默认格式输出创建日期" << fileInfo.created();
qDebug() <<"设置日期格式" << fileInfo.created().toString("yyyy/MM//dd hh:mm:ss");
// 新版本QT中这个方法过时了created, 现在用birthTime方法
qDebug() << fileInfo.birthTime();
qDebug() << fileInfo.birthTime().toString("yyyy/MM//dd hh:mm:ss");