Qt5基础系列
Qt基础的学习笔记。此文章为在B站上学习黑马程序员Qt教程的QTextStream操作文件部分做的记录,加深理解,方便回看。
一、简介
QTextStream和QDataStream的使用类似,只不过它是操作纯文本文件的。
二、代码示例
1、头文件
主要定义了两个共有函数writeData();readData();还有一个按钮事件。
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
void writeData();
void readData();
private slots:
void on_pushButton_clicked();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
2、引入类
#include "widget.h"
#include "ui_widget.h"
#include <QTextStream>
#include <QFile>
#include <QDebug>
#include <QFileDialog>
3、主程序
#define cout qDebug()<< "["<<__FILE__<<":"<<__LINE__<<"]"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
writeData();
readData();
}
Widget::~Widget()
{
delete ui;
}
void Widget::writeData()
{
QFile file;
file.setFileName("../demo.txt");
bool isOk = file.open(QIODevice::WriteOnly);
if(true == isOk)
{
QTextStream stream(&file);
//指定编码
//stream.setCodec("UTF-8");
stream << QString("气质达人!")<<250;
file.close();
}
}
void Widget::readData()
{
QFile file;
file.setFileName("../demo.txt");
bool isOk = file.open(QIODevice::ReadOnly);
if(true == isOk)
{
QTextStream stream(&file);
//指定编码
//stream.setCodec("UTF-8");
QString str;
int a;
stream >>str>>a;
cout<<str<<a;
file.close();
}
}
在使用QDataStream的时候,stream >>str >> a读取内容很方便,但是使用了QTextStream时却有所不同:读出的时候,以文本形式写入数据,是没有数据之间的分隔的,它会将整个内容视为一个字符串。整型部分则输出0。
因此,使用文本文件时,很少会将其分割开来读取。同时,我们使用一个按钮事件结合对数据流的readAll方法来读取文本内容。
void Widget::on_pushButton_clicked()
{
QString path = QFileDialog::getOpenFileName(this,
"open","../");
if(false == path.isEmpty()){
QFile file;
file.setFileName(path);
bool isOk = file.open(QIODevice::ReadOnly);
if(true == isOk)
{
QTextStream stream(&file);
//指定编码
stream.setCodec("UTF-8");
QString str = stream.readAll();
ui->textEdit->setText(str);
}
file.close();
}
}
4、结果截图
三、总结
以上就是QTextStream的内容了。值得注意的是,读文件如果指定了编码UTF-8则只能读取对应UTF-8格式的txt文件。如果文件是ANSI之类的格式,则不需要指定编码。同样写文件,如果指定编码是UTF-8则输出也是相应格式的文件,否则输出是ANSI格式的文件。