1.文件的读取与显示
(关于使用到的函数,大家可以在帮助手册里面查看)
Question
点击(信号)文件按钮(被观察者),显示文件列表,打开某一个文件),显示文件名到控件Filename中(文件对话框);然后显示文件内容(槽函数)到Filetext控件中(被观察者)
思路
- 设置点击文件按钮,显示文件名和内容的QTextEdit控件。
- 设置文件对话框(QT内置对话框),获取文件名
- 读取文件,显示文件内容到窗口
实现
方式1
#include "Csdnmainwindow.h"
#include "ui_Csdnmainwindow.h"
#include <QFileDialog>
CSDNMainWindow::CSDNMainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::CSDNMainWindow)
{
ui->setupUi(this);
connect(ui->FileButton,&QPushButton::clicked,this,&CSDNMainWindow::OnFilebtnClick);
}
CSDNMainWindow::~CSDNMainWindow()
{
delete ui;
}
void CSDNMainWindow::OnFilebtnClick()
{
//文件对话框,上次演示过
QString filename = QFileDialog::getOpenFileName(this,"打开文本文件","F:/","");
//拿到文件名
ui->Filename->setText(filename);
//读取文件
QFile file(filename);//构建文件对象,对文件做相关操作
bool tag = file.open(QIODevice::ReadOnly);//只读方式打开文件
if(!tag)
{
return;//文件打开失败
}
//按行读取文件
while(!file.atEnd())//读文件直到末尾
{
char str[1024] = {0};
file.readLine(str,sizeof(str));
ui->Filetext->append(str);
}
file.close();
}
方式2
ui接口不变,槽函数的实现方式变化了
void CSDNMainWindow::on_FileButton_clicked()
{
QString filename = QFileDialog::getOpenFileName(this,"打开文本文件","F:/","");
//拿到文件名
ui->Filename->setText(filename);
//读取文件
QFile file(filename);//构建文件对象,对文件做相关操作
bool tag = file.open(QIODevice::ReadOnly);//只读方式打开文件
if(!tag)
{
return;//文件打开失败
}
QByteArray array;//字符动态数字==字节数组
//按行读取文件
while(!file.atEnd())
{
array += file.readLine();//将所有内容存放到array中
}
ui->Filetext->setText(array);//自动转化
file.close();
}
结果
2.文件的修改与保存
将上一过程打开的文件编辑修改之后,另存为一个新文件。
或者自己在编辑框输入文件内容来保存
思路
- 创建另存为按钮,转到槽,通过文件对话框设置文件默认路径与名(可修改)
- 写入文件内容即可
实现
ui界面
这里还是右击,选择转到槽
槽函数
void CSDNMainWindow::on_savefileButton_clicked()
{
QString filename = QFileDialog::getSaveFileName(this, " 另存为 " , " F:/ Delete.txt","*.txt" );
QFile file(filename);//创建文件对象
bool tag = file.open(QIODevice::WriteOnly);//写内容到文件中
if(!tag)
{
return;
}
QString text = ui->Filetext->toPlainText();//文本框中的内容
file.write(text.toUtf8());//将text内容转化为字节数组
file.close();
}
结果
3.保存为二进制文件
和普通文件没有什么不同,只是多了一个流对象。
实现
ui界面
槽函数
//保存为二进制文件
void CSDNMainWindow::on_saveBintybutton_clicked()
{
QString filename = QFileDialog::getSaveFileName(this, " 另存为二进制 " , " F:/ DeleteByte.bin","*.bin" );
QString text = ui->Filetext->toPlainText();//获取文本框中的内容
QFile file(filename);//创建文件对象
bool tag = file.open(QIODevice::WriteOnly);//写内容到文件中
if(!tag)
{
return;
}
//创建流对象
QDataStream writeout(&file);//传入文件对象指针
QString str = " 悟空 ? ";
writeout << 12345 ;
writeout << str ;
file.close();
}
结果
二进制文件的读
实现
void CSDNMainWindow::on_readByteButton_clicked()
{
QString filename = QFileDialog::getOpenFileName(this, " 选择二进制文件 " , " F:/ " , " *.bin *.txt" );
//读取文件
QFile file(filename);//构建文件对象,对文件做相关操作
bool tag = file.open(QIODevice::ReadOnly);//只读方式打开文件
if(!tag)
{
return;//文件打开失败
}
//创建数据流对象
QDataStream writein(&file);
int num;
QString str;
writein >> num;
writein >> str;
qDebug() << num;
qDebug() <<str;
file.close();
}