前言
在使用Qt Creator写demo的时候,每当程序重新运行,之前调试的信息就会遇到清空的情况。
下面介绍一个方法,可以在Qt文件关闭之后数据依然可以保存。
一、目标
实现Qt文件的数据保存,具体方法是
- 把数据 保存到本地文件.txt
- 运行后 读取上一次保存数据
- 该程序只用到.cpp文件
二、使用步骤
1.保存到本地文件.txt
.cpp代码如下:
#include <QFile>
#include <QDebug>
#include <QPushButton>
#include <QTableWidget>
//保存到本地文件
void Widget::on_saveBtn_clicked()
{
//文件对象
QFile file("D:\\demo02.txt");
//只写方式打开
if(!file.open(QFile::WriteOnly | QFile::Text))//只写的方式打开
{
return;
}
//文件流对象,读取文本文件
QTextStream out(&file);
//遍历对象
int romCount = ui->tableWidget->rowCount();//获取总行数
for(int i=0;i<romCount;i++)//行
{
QString rowstring;
for(int j=0;j<5;j++)//列
{
//遍历表格中的字符串
rowstring +=ui->tableWidget->item(i,j)->text();
rowstring +="\t";
}
rowstring += "\n";//下一行空格
out<<rowstring; //把每行数据传到文件对象
}
file.close();
}
2.读取上一次保存数据
这段代码要放到主窗口的构造函数内,因为程序运行之后就需要立即读取数据:
QFile f("D:\\demo02.txt");
if(!f.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug() << ("打开文件失败");
return;
}
QTextStream t_in(&f); //QTextStream读写文本文件的接口
int t_cloumCount = 5;//列
int t_lineCount = 0; //行
QVector<QStringList> t_data; //文件内容
while(!t_in.atEnd())
{
QString t_line = t_in.readLine();
QStringList t_list = t_line.split('\t');
t_data.append(t_list);
t_lineCount++;
}
//设置表格行数
ui->tableWidget->setRowCount(t_lineCount);
//设置表格列数
ui->tableWidget->setColumnCount(t_cloumCount);
//表格内容
for(int i = 0; i<t_data.size(); i++)
{
for(int j = 0; j < t_data[i].count(); j++)
{
ui->tableWidget->setItem(i,j,new QTableWidgetItem(t_data[i][j]));
}
}
总结
程序运行下来是没问题的。