#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QDataStream>
#include <QMessageBox>
//#include "qw.h"
void MainWindow::resetTable(int aRowCount)
{ //表格复位,先删除所有行,再设置新的行数,表头不变
// QStringList headerList;
// headerList<<"测深(m)"<<"垂深(m)"<<"方位(°)"<<"总位移(m)"<<"固井质量"<<"测井取样";
// theModel->setHorizontalHeaderLabels(headerList); //设置表头文字
theModel->removeRows(0,theModel->rowCount()); //删除所有行
theModel->setRowCount(aRowCount);//设置新的行数
// QStandardItem *aItem;
// QModelIndex index;
QString str=theModel->headerData(theModel->columnCount()-1,
Qt::Horizontal,Qt::DisplayRole).toString();
for (int i=0;i<theModel->rowCount();i++)
{ //设置最后一列
QModelIndex index=theModel->index(i,FixedColumnCount-1); //获取模型索引
QStandardItem* aItem=theModel->itemFromIndex(index); //获取item
aItem->setCheckable(true);
aItem->setData(str,Qt::DisplayRole);
aItem->setEditable(false); //不可编辑
}
}
bool MainWindow::saveDataAsStream(QString &aFileName)
{//将模型数据保存为Qt预定义编码的数据文件
QFile aFile(aFileName); //以文件方式读出
if (!(aFile.open(QIODevice::WriteOnly | QIODevice::Truncate)))
return false;
QDataStream aStream(&aFile);
aStream.setVersion(QDataStream::Qt_5_9); //设置版本号,写入和读取的版本号要兼容
qint16 rowCount=theModel->rowCount(); //数据模型行数
qint16 colCount=theModel->columnCount(); //数据模型列数
aStream<<rowCount; //写入文件流,行数
aStream<<colCount;//写入文件流,列数
//获取表头文字
for (int i=0;i<theModel->columnCount();i++)
{
QString str=theModel->horizontalHeaderItem(i)->text();//获取表头文字
aStream<<str; //字符串写入文件流,Qt预定义编码方式
}
//获取数据区的数据
// qint16 ceShen;
// qreal chuiShen;
// qreal fangWei;
// qreal weiYi;
// QString zhiLiang;
// bool quYang;
// QStandardItem *aItem;
for (int i=0;i<theModel->rowCount();i++)
{
QStandardItem* aItem=theModel->item(i,0); //测深
qint16 ceShen=aItem->data(Qt::DisplayRole).toInt();
aStream<<ceShen;// 写入文件流,qint16
aItem=theModel->item(i,1); //垂深
qreal chuiShen=aItem->data(Qt::DisplayRole).toFloat();
aStream<<chuiShen;//写入文件流, qreal
aItem=theModel->item(i,2); //方位
qreal fangWei=aItem->data(Qt::DisplayRole).toFloat();
aStream<<fangWei;//写入文件流, qreal
aItem=theModel->item(i,3); //位移
qreal weiYi=aItem->data(Qt::DisplayRole).toFloat();
aStream<<weiYi;//写入文件流, qreal
aItem=theModel->item(i,4); //固井质量
QString zhiLiang=aItem->data(Qt::DisplayRole).toString();
aStream<<zhiLiang;// 写入文件流,字符串
aItem=theModel->item(i,5); //测井
bool quYang=(aItem->checkState()==Qt::Checked);
aStream<<quYang;// 写入文件流,bool型
}
aFile.close();
return true;
}
bool MainWindow::openDataAsStream(QString &aFileName)
{ //从Qt预定义流文件读入数据
QFile aFile(aFileName); //以文件方式读出
if (!(aFile.open(QIODevice::ReadOnly)))
return false;
QDataStream aStream(&aFile); //用文本流读取文件
aStream.setVersion(QDataStream::Qt_5_9); //设置流文件版本号
qint16 rowCount,colCount;
aStream>>rowCount; //读取行数
aStream>>colCount; //列数
this->resetTable(rowCount); //表格复位
//获取表头文字
QString str;
for (int i=0;i<colCount;i++)
aStream>>str; //读取表头字符串
//获取数据区文字,
qint16 ceShen;
qreal chuiShen;
qreal fangWei;
qreal weiYi;
QString zhiLiang;
bool quYang;
QStandardItem *aItem;
QModelIndex index;
for (int i=0;i<rowCount;i++)
{
aStream>>ceShen;//读取测深, qint16
index=theModel->index(i,0);
aItem=theModel->itemFromIndex(index);
aItem->setData(ceShen,Qt::DisplayRole);
aStream>>chuiShen;//垂深,qreal
index=theModel->index(i,1);
aItem=theModel->itemFromIndex(index);
aItem->setData(chuiShen,Qt::DisplayRole);
aStream>>fangWei;//方位,qreal
index=theModel->index(i,2);
aItem=theModel->itemFromIndex(index);
aItem->setData(fangWei,Qt::DisplayRole);
aStream>>weiYi;//位移,qreal
index=theModel->index(i,3);
aItem=theModel->itemFromIndex(index);
aItem->setData(weiYi,Qt::DisplayRole);
aStream>>zhiLiang;//固井质量,QString
index=theModel->index(i,4);
aItem=theModel->itemFromIndex(index);
aItem->setData(zhiLiang,Qt::DisplayRole);
aStream>>quYang;//bool
index=theModel->index(i,5);
aItem=theModel->itemFromIndex(index);
if (quYang)
aItem->setCheckState(Qt::Checked);
else
aItem->setCheckState(Qt::Unchecked);
}
aFile.close();
return true;
}
bool MainWindow::saveBinaryFile(QString &aFileName)
{ //保存为纯二进制文件
QFile aFile(aFileName); //以文件方式读出
if (!(aFile.open(QIODevice::WriteOnly)))
return false;
QDataStream aStream(&aFile); //用文本流读取文件
// aStream.setVersion(QDataStream::Qt_5_9); //无需设置数据流的版本
aStream.setByteOrder(QDataStream::LittleEndian);//windows平台
// aStream.setByteOrder(QDataStream::BigEndian);//QDataStream::LittleEndian
qint16 rowCount=theModel->rowCount();
qint16 colCount=theModel->columnCount();
aStream.writeRawData((char *)&rowCount,sizeof(qint16)); //写入文件流
aStream.writeRawData((char *)&colCount,sizeof(qint16));//写入文件流
//获取表头文字
// QString str;
QByteArray btArray;
QStandardItem *aItem;
for (int i=0;i<theModel->columnCount();i++)
{
aItem=theModel->horizontalHeaderItem(i); //获取表头item
QString str=aItem->text(); //获取表头文字
btArray=str.toUtf8(); //转换为字符数组
aStream.writeBytes(btArray,btArray.length()); //写入文件流,长度uint型,然后是字符串内容
}
//获取数据区文字,
// qint16 ceShen;
// qreal chuiShen;
// qreal fangWei;
// qreal weiYi;
// QString zhiLiang;
// bool quYang;
qint8 yes=1,no=0; //分别代表逻辑值 true和false
for (int i=0;i<theModel->rowCount();i++)
{
aItem=theModel->item(i,0); //测深
qint16 ceShen=aItem->data(Qt::DisplayRole).toInt();//qint16类型
aStream.writeRawData((char *)&ceShen,sizeof(qint16));//写入文件流
aItem=theModel->item(i,1); //垂深
qreal chuiShen=aItem->data(Qt::DisplayRole).toFloat();//qreal 类型
aStream.writeRawData((char *)&chuiShen,sizeof(qreal));//写入文件流
aItem=theModel->item(i,2); //方位
qreal fangWei=aItem->data(Qt::DisplayRole).toFloat();
aStream.writeRawData((char *)&fangWei,sizeof(qreal));
aItem=theModel->item(i,3); //位移
qreal weiYi=aItem->data(Qt::DisplayRole).toFloat();
aStream.writeRawData((char *)&weiYi,sizeof(qreal));
aItem=theModel->item(i,4); //固井质量
QString zhiLiang=aItem->data(Qt::DisplayRole).toString();
btArray=zhiLiang.toUtf8();
aStream.writeBytes(btArray,btArray.length()); //写入长度,uint,然后是字符串
//
没有合适的资源?快使用搜索试试~ 我知道了~
QT二进制文件读写应用程序示例

共37个文件
bmp:19个
cpp:5个
h:4个

8 下载量 28 浏览量
2024-01-24
09:40:01
上传
评论 1
收藏 16KB RAR 举报
温馨提示
除了文本文件之外,其他需要按照一定的格式定义读写的文件都称为二进制文件。每种格式的二进制文件都有自己的格式定义,写入数据时按照一定的顺序写入,读出时也按照相应的顺序读出。例如地球物理中常用的SEG-Y格式文件,必须按照其标准格式要求写入数据才符合这种文件的格式规范,读取数据时也需要按照格式定义来读出。 Qt使用QFile和QDataStream进行二进制数据文件的读写。QFile负责文件的IO设备接口,即与文件的物理交互,QDataStream以数据流的方式读取文件内容或写入文件内容。 本节以实例samp7_2演示二进制文件的读写.
资源推荐
资源详情
资源评论






























收起资源包目录









































共 37 条
- 1
资源评论


冷凝女子
- 粉丝: 701
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 【微信小程序源码】化妆品商城.zip
- 【微信小程序源码】画布:时钟.zip
- 【微信小程序源码】环球小镇.zip
- 【微信小程序源码】会议精灵.zip
- 【微信小程序源码】绘本跟读.zip
- 【微信小程序源码】婚庆.zip
- 【微信小程序源码】货币汇率.zip
- 【微信小程序源码】机器人兔兔.zip
- 【微信小程序源码】积分商城.zip
- 【微信小程序源码】基础商城.zip
- 【微信小程序源码】吉林宝商城r.zip
- 【微信小程序源码】极简天气.zip
- 【微信小程序源码】记录宝宝喂奶.zip
- 【微信小程序源码】急救应急处理.zip
- 【微信小程序源码】集思笑话,含Vue.js后端,点赞.zip
- 【微信小程序源码】记账统计.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
