QDataStream的例子:1.只写;2.只读。
公用部分widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QFile> //想要使用QDataStream离不开QFile哦
#include <QDataStream> //数据流
#include <QFileDialog> //文件对话框
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
void on_but_Read_clicked();
void on_but_Write_clicked();
void on_but_ReadWrite_clicked();
private:
Ui::Widget *ui;
//QFile对象
QFile file;
//QDataStream对象
QDataStream stream;
};
#endif // WIDGET_H
widget.cpp的公用部分
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
1.只写操作:存在widget.cpp里
//只写模式,写文件
void Widget::on_but_Write_clicked()
{
//获取文件路径
QString path = QFileDialog::getOpenFileName(
this,
"打开文件",
"../",
"TXT(*.txt)");
//路径合不合里
if(false == path.isEmpty())
{
//指定文件
file.setFileName(path);
//判断文件是否存在
if(true == file.exists())
{
//打开文件,指定打开方式
bool isOpen = file.open(QIODevice::WriteOnly);
if(true == isOpen)
{
//指定文件
stream.setDevice(&file);
//获取textEdit的内容
QString str = ui->textEdit->toPlainText();
//开始写进去了
stream << str << 123 << 12.3;
//关闭文件,关闭后才真正写进去
file.close();
ui->textEdit->setText("成功");
}
else
{
//文件打开失败
ui->textEdit->setText("文件打开失败");
}
}
else
{
//文件不存在
ui->textEdit->setText("文件不存在");
}
}
else
{
//无效路径
ui->textEdit->setText("无效路径");
}
}
2.只读操作:存在widget.cpp里
//只读模式,读文件
void Widget::on_but_Read_clicked()
{
//获取文件路径
QString path = QFileDialog::getOpenFileName(
this,
"打开文件",
"../",
"TXT(*.txt)");
//提示:
ui->textEdit->setText(QString("当前读取的文件路径为:%1").arg(path));
if(false == path.isEmpty())
{
//指定文件
file.setFileName(path);
//判断文件是否存在
if(true == file.exists())
{
//打开文件,指定打开方式
bool isOpen = file.open(QIODevice::ReadOnly);
if(true == isOpen)
{
//指定文件
stream.setDevice(&file);
QString str;
int a;
double b;
//取出数据
stream >> str >> a >> b;
//合并到一个字符串里
QString str1 = QString("%1%2%3")
.arg(str.toUtf8().data()).arg(a).arg(b);
//将str1显示在textEdit中
ui->textEdit->append(str1);
//关闭文件
file.close();
}
else
{
//文件打开失败
ui->textEdit->setText("文件打开失败");
}
}
else
{
//文件不存在
ui->textEdit->setText("文件不存在");
}
}
else
{
//无效路径
ui->textEdit->setText("无效路径");
}
}