QT文件和流

   日期:2020-05-15     浏览:93    评论:0    
核心提示:功能需求:如果要用QT来写一个简单的应用程序,实现将界面上的文本框的内容存储到指定目录文件中,然后再从指定文件读取出来展示到界面上。粗略设计的UI界面如图所示:大概思路:输入名字年龄,点击write按钮,将名字年龄写入文件,然后点击read按钮,读出刚刚保存的信息,并展示到富文本框中。完成这个功能需要使用QFile头文件,即要添加引用#include 按钮write的槽事件如下void MainWindow::on_write...ui

功能需求:

如果要用QT来写一个简单的应用程序,实现将界面上的文本框的内容存储到指定目录文件中, 然后再从指定文件读取出来展示到界面上。

粗略设计的UI界面如图所示:

大概思路:

输入名字年龄,点击write 按钮,将名字年龄写入文件,然后点击read按钮,读出刚刚保存的信息,并展示到富文本框中。

完成这个功能需要使用 QFile 头文件,即要添加引用  

#include <QFile>

如果使用 QDataStream 转换,则需要引用  

#include <QTextStream>

按钮 write 的槽事件如下

void MainWindow::on_write_bt_clicked()
{
    QFile outfile("1.txt");//如果文件不存在,则创建该文件。路径在执行文件的上一级路径下。
    outfile.open(QFileDevice::WriteOnly);

 
//    //QDataStream
//    QDataStream outStream(&outfile);
////    outStream<<ui->name_edit->text().toLatin1()<<ui->age_edit->text().toLatin1();//写进去的数据每个前面会有四个byte
//    outStream.writeRawData((ui->name_edit->text()).toLatin1()+(ui->age_edit->text()).toLatin1(),((ui->name_edit->text()).toLatin1()+(ui->age_edit->text()).toLatin1()).size());

 

 
    //QTextStream
    QTextStream outStream(&outfile);
    outStream.setCodec("UTF-8");
    outStream<<ui->name_edit->text()<<ui->age_edit->text();

 

 

 
    //文件流直接写
//    outfile.write((ui->name_edit->text()).toLatin1()+(ui->age_edit->text()).toLatin1());
//
    outfile.close();
}

 

这个方法中用到了两种方式,一种是直接对文件进行写操作,另一种是转化成流文件(转换成QDataStream/QTextStream流),说到这个顺带讲一下,Qt提供了辅助类简化文本文件/数据文件的读写的两种流方式:

QTextStream:写入的数据全部转换为可读文本;

QDataStream:写入的数据根据类型转换为二进制文件

代码中文件直接操作的write()也好还是转换成QDataStream 流以后再操作也好,实质上都是要转换成QByteArray,才能完成写操作。完成QString到QByteArray转换的方法比较常用的有toLatin1()、data()两种。

 

read 按钮对应的槽事件如下:

void MainWindow::on_read_bt_clicked()
{
    QString str;
    QFile infile("1.txt");
    infile.open(QFileDevice::ReadOnly);

 
//    //QDataStream
//    QDataStream inStream(&infile);
//    QByteArray arry=infile.readAll();
//    ui->read_tb->setText(arry);

 
    QTextStream inStream(&infile);
    QByteArray arry=infile.readAll();
    ui->read_tb->setText(arry);

 

 
    //文件流直接读取
//    str=infile.readAll();
//    ui->read_tb->setText(str);

 
    infile.close();
}

运行结果如下所示:

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服