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. SVN 在 linux 下的配置

    0.服务器主机需要打开websharing: sudo su (进入root,需要输入密码) apachectl start (没有反应即打开成功) 1.建立想要保存软件仓库的目录 最好在/users ...

  2. JS 引用

    var arr1=[1,2,3,4]; var arr2=arr1; arr2.push(5); console.log(arr1);//和arr2一样 console.log(arr1==arr2) ...

  3. ASP.NET jQuery 随笔 显示RadioButtonList成员选中的内容和值

    通过jQuery来获取RadioButtonList成员内容. <%@ Page Language="C#" AutoEventWireup="true" ...

  4. 两种解决Qt5显示中文乱码的方法(使用QStringLiteral和#pragma execution_character_set("utf-8")两种方法)

    升级到Qt5.X之后,原先解决的Qt显示中文乱码的方法突然不适用了,找了很多方式来解决这个问题第一种:在公司代码里看到的方法,先将对应的cpp文件用windows自带的记事本打开,另存为UTF-8格式 ...

  5. 【opengl】OpenGL中三维物体显示在二维屏幕上显示的变换过程

    转自:http://blog.sina.com.cn/s/blog_957b9fdb0100zesv.html 为了说明在三维物体到二维图象之间,需要经过什么样的变换,我们引入了相机(Camera)模 ...

  6. CF 191 div2

    A.数据量很小,直接爆搞. #include <iostream> #include <cstdio> #include <algorithm> #include ...

  7. Spark学习体系

    底理解Spark,能够分为以下几个层次. 1 Spark基础篇 1.1 Spark生态和安装部署 在安装过程中,理解其基本操作步骤. 安装部署 Spark安装简单介绍 Spark的源代码编译 Spar ...

  8. ps快速删除圆角图片旁白的白色区域方法

    简单实用5招的ps快速删除圆角图片旁白的白色区域方法 1.图像-模式-rgb颜色 2.双击背景取消图层锁定 3.用魔棒工具点击要删除的区域 4.delete删除 5.另存为png图片

  9. Oracle PL/SQL 游标

    在PL/SQL块中执行SELECT.INSERT.DELETE和UPDATE语句时,ORACLE会在内存中为其分配上下文区(Context Area),即缓冲区.游标是指向该区的一个指针,或是命名一个 ...

  10. JDBC初步(一)

    import java.sql.*; public class TestJDBC { // orcl为oracle数据库中的数据库名,localhost表示连接本机的oracle数据库 // 1521 ...