QTexstStream用于读写纯文本以及HTML,XML等文本格式的文件,此类考虑了Unicode编码与系统本地编码的或其它任意编码之间的转换问题,别且明确地处理了因使用不同的操作系统而导致的行尾符之间的转换(windows系统的行尾符是“\r\n”,unix和mac os x系统是“\n”)。

QTexstStream的操作对象是QIODevice,可是QFile,QTEmporaryFile,QBuffer,QProcess,QTcpSocket或者QUpdSocket,此外还可以直接在QString上使用,如:

QString str;

QTextStream(&str)<<oct<<31<<" "<<dec<<25<<endl;

qDebug()<<oct<<31<<" "<<dec<<25<<endl;

qDebug输出的结果是“37 25”,这是因为十进制31的八进制值是37,因为QString的编码总是Unicode编码,因此使用QString做QIODevice时如果想要用unicode编码就不用再认为设置了。

QTexstStream还有一些类似<iostream>的选项,比如用showbase设置显示二进制、八进制、十六进制的前缀,使用uppercasedigits和hex输出大写十六进制数:

fileOut<<showbase<<uppercasedigits<<hex<<1234567;

也可以使用成员函数来完成这些设置:

fileOut.setNumberFlags(QTextStream::ShowBase|QTextStream::UppercaseDigits);

fileOut.setIntegerBase(16);

 

文件包含:

#include <QTextStream>

#include <QMessageBox>

代码:

QFile file("test.txt");

if(!file.open(QIODevice::WriteOnly))

{

QMessageBox::information(this,tr("打开文件失败!"),file.errorString());

}

QTextStream fileOut(&file);

// fileOut.setCodec("UTF-8");  //unicode UTF-8  ANSI

fileOut <<"Helloworld!"<<"\n";

fileOut <<tr("写文件,第").to<<1<<"行."<<endl;

file.flush();

file.close();

输出结果:

Hello world!

D′???t£?μú1DD.

使用上面的方式写文件时,如果文件不存在,会自动创建。写入英文时没有问题,但是如果写入中文,出现的是乱码。

写中文文本文件

文件包含:

#include <QTextStream>

#include <QMessageBox>

#include <QTextCodec>

#include <string>

代码:

QFile file("test.txt");

if(!file.open(QIODevice::WriteOnly | QFile::Text))

{

QMessageBox::information(this,tr("打开文件失败!"),file.errorString());

return;

}

QTextCodec* codec=QTextCodec::codecForName("UTF-8");

std::string strData="abcde写入中文";

char* buf=new char[strData.size()+1];

strcpy(buf,strData.c_str());

QString qStr=qStr.fromLocal8Bit(buf);  //fromLocal8Bit是QString的静态成员方法,这里的对象名只起标识类的作用

QTextStream out (&file);

out.setCodec(codec);

out <<qStr<<"\n";

file.flush();

file.close();

输出结果:

abcde写入中文

使用上面的方法可以输出中文,但是过于复杂并且使用不方便。可以使用tr函数来简化问题。

http://blog.csdn.net/giselite/article/details/6978771

QTexstStream的操作对象是QIODevice(因此QFile,QBuffer,QProcess,QTcpSocket都可以使用),或者QString的更多相关文章

  1. QIODevice (Qt中所有 I/O devices 的基类,QFile,QBuffer,QTcpSocket等)

    QIODevice是所有Qt I/O设备的基类,它提供了对支持块读写设备(例如QFile,QBuffer,QTcpSocket)的通用实现和抽象接口.QIODevice是一种抽象,不能被实例化,但是, ...

  2. url_for()中的坑,url_for操作对象是函数,而不是route里的路径

    url_for操作对象是函数,而不是route里的路径. url_for操作对象是函数,而不是route里的路径. url_for操作对象是函数,而不是route里的路径.

  3. 一次 MySQL 误操作导致的事故,「高可用」都顶不住了!

    这是悟空的第 152 篇原创文章 官网:www.passjava.cn 你好,我是悟空. 上次我们项目不是把 MySQL 高可用部署好了么,MySQL 双主模式 + Keepalived,来保证高可用 ...

  4. Qt操作xml文件(增删改功能)

    这个例子是在根据网上博客<Qt数据库(XML)>改写的一个操作XML的实现. 借鉴了很多里面的代码,大家可以结合上面的博客对照,相信你肯定会对XML的操作熟练起来. 我建立的是Qwidge ...

  5. 开涛spring3(7.3) - 对JDBC的支持 之 7.3 关系数据库操作对象化

    7.3.1  概述 所谓关系数据库对象化其实就是用面向对象方式表示关系数据库操作,从而可以复用. Spring JDBC框架将数据库操作封装为一个RdbmsOperation,该对象是线程安全的.可复 ...

  6. spring3: 对JDBC的支持 之 关系数据库操作对象化

    7.3.1  概述 所谓关系数据库对象化其实就是用面向对象方式表示关系数据库操作,从而可以复用. Spring JDBC框架将数据库操作封装为一个RdbmsOperation,该对象是线程安全的.可复 ...

  7. windows核心编程---第三章 内核对象及句柄本质

      本章讨论的是相对抽象的概念,不涉及任何具体的内核对象的细节而是讨论所有内核对象的共有特性. 首先让我们来了解一下什么是内核对象.内核对象通过API来创建,每个内核对象是一个数据结构,它对应一块内存 ...

  8. 《windows核心编程系列》三谈谈内核对象及句柄的本质

    内核对象 本章讨论的是相对抽象的概念,不涉及任何具体的内核对象的细节而是讨论所有内核对象的共有特性. 首先让我们来了解一下什么是内核对象.内核对象通过API来创建,每个内核对象是一个数据结构,它对应一 ...

  9. jquery概要--基础01

    jquery对象,DOM对象 var $cr = $('#cr');          var cr = $cr[0]; /var cr = $cr.get(0); var cr = document ...

随机推荐

  1. Qt实战之开发CSDN下载助手 (2)

    现在,我们正式开工啦.这一篇主要学习下基本的抓包分析.学会协议登录CSDN并制作登陆界面. 准备工具: 一款http抓包工具. 可以是FireBug或者fiddler.这里我们用httpWatch. ...

  2. Qt开发小工具之gif转换器(使用QMovie截取每一帧为QImage,然后用QFile另存为图片文件)

    最近,QQ上好多各种gif表情.每一个都很经典呀..于是我就想把它转换成一张张静态图片...没学过ps.于是写了几行代码.完工.核心代码如下 主要是借助QMovie类.文件读取模式选择QMovie:: ...

  3. 74HC595的中文资料

    74HC595--具有三态输出锁存功能的8位串行输入.串行/并行输出移位寄存器 本文翻译自NXP的74HC595的datasheet 74HC595和74HCT595是带有存储寄存器和三态输出的8位串 ...

  4. .net 常用方法

    1.String数组转换成Int数组 string[] strArr =  "a,b,c".Split(','); int[] intArr = Array.ConvertAll& ...

  5. Struts2项目中使用Ajax报错

    在Struts2项目中使用Ajax向后台请求数据,当添加了json-lib-2.3-jdk15.jar和struts2-json-plugin-2.3.4.1.jar两个包时,在result中配置ty ...

  6. Phases of translation

    Phases of translation--翻译阶段 The C++ source file is processed by the compiler as if the following pha ...

  7. 在一个数组中是否存在两个数A、B的和为M

    #include <iostream>#include <algorithm>//#include <vector>using namespace std; int ...

  8. Python学习之路——模块

    一.模块: 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需 ...

  9. django-celery提供给顾客使用实例

    导入数据库 from djcelery import models as celery_models   celery_models.PeriodicTask.objects.create(...) ...

  10. Chrome Firefox 自定义背景色

    Chrome有个自定义背景色的文件  Custom.css 默认里面什么字都没写 html, body {background-color: #e0dcc0!important;}      这个颜色 ...