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. ie6与固定定位fixed,+ 条件注释格式注意

    ie6并不支持position:fixed, ie7+都支持fixed定位, ie6固定定位实现方法1: <!DOCTYPE html> <html> <head> ...

  2. ID卡学习笔记

    前言: 我也来篇关于当时学习ID卡的笔记.前段时间小区装门禁.一个钮扣型的ID卡就要30块.非常黑心.因为其ID卡的成本也就是1块钱以下.因此我也加入到这方面的研究.用来模拟ID卡的T5557卡成本2 ...

  3. 创见WiFi SD卡破解之路

    我最近搞了张Transcend WiFi SD,颇为得意.它可以让我在几秒钟内将单反(奶昔,相当便携)中拍摄的照片传到任何支持wifi的设备上.我很喜欢在旅途中拍摄和分享图片,所以对我而言,可以无线传 ...

  4. 在VPS上安裝BT軟體Transmission

    在VPS上安裝BT軟體Transmission   作者: 窮苦人家的小孩 | 2009-12-04 55 Comments   VPS 還能怎玩?! 裝Proxy,裝VPN,這還不夠,我還用來掛種子 ...

  5. sign a third-party dll which don't have a strong name

    Problem: Assembly generation failed -- Referenced assembly '' does not have a strong name Cause: thi ...

  6. 面向对象之静态方法(static)和实例化方法的区别

    这是一个经常被时时提出来的问题,很多时候我们以为理解了.懂了,但深究一下,我们却发现并不懂. 方法是我们每天都在写得,很多程序员大多都使用实例化方法,而很少使用静态方法,问原因也说不出来所以然,或者简 ...

  7. javascript事件及事件传输

    函数必须调用才能执行,可a()加下面的函数调用 JS事件 1.js事件通常和函数结合来使用,这样可以通过发生的事件来驱动函数的执行,从而引起html出现不同的效果. 2.属性(当这些事件的属性发生时, ...

  8. BZOJ 1194: [HNOI2006]潘多拉的盒子( BFS + tarjan + dp )

    O(S²)枚举2个诅咒机, 然后O(n²)BFS去判断. 构成一个有向图, tarjan缩点, 然后就是求DAG的最长路.. ------------------------------------- ...

  9. python成长之路13

    一:SqlAlchemy ORM ORM:Object Relational Mapping 对象关系映射是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换 SQLAlchemy是 ...

  10. 入门前端之HTML

    本文内容: HTML概念 HTML元素 HTML属性 HTML标题 HTML段落 HTML格式化 HTML样式 HTML 链接 HTML 图像 HTML 表格 HTML 列表 HTML 块 HTML ...