返回介绍

QTextStream类

发布于 2019-10-04 15:03:23 字数 16936 浏览 2921 评论 0 收藏 0

QTextStream类提供了使用QIODevice读写文本的基本功能。 详情请见……

#include <qtextstream.h>

由QTextIStream和QTextOStream继承。

所有成员函数的列表。

公有成员

  • enum Encoding { Locale, Latin1, Unicode, UnicodeNetworkOrder, UnicodeReverse, RawUnicode, UnicodeUTF8 }
  • void setEncoding ( Encodinge )
  • void setCodec ( QTextCodec*codec )
  • QTextStream ()
  • QTextStream ( QIODevice*iod )
  • QTextStream ( QString*str, intfilemode )
  • QTextStream ( QString&str, intfilemode ) (obsolete)
  • QTextStream ( QByteArraya, intmode )
  • QTextStream ( FILE*fh, intmode )
  • virtual ~QTextStream ()
  • QIODevice * device () const
  • void setDevice ( QIODevice*iod )
  • void unsetDevice ()
  • bool atEnd () const
  • bool eof () const (obsolete)
  • QTextStream & operator>> ( QChar&c )
  • QTextStream & operator>> ( char&c )
  • QTextStream & operator>> ( signedshort&i )
  • QTextStream & operator>> ( unsignedshort&i )
  • QTextStream & operator>> ( signedint&i )
  • QTextStream & operator>> ( unsignedint&i )
  • QTextStream & operator>> ( signedlong&i )
  • QTextStream & operator>> ( unsignedlong&i )
  • QTextStream & operator>> ( float&f )
  • QTextStream & operator>> ( double&f )
  • QTextStream & operator>> ( char*s )
  • QTextStream & operator>> ( QString&str )
  • QTextStream & operator>> ( QCString&str )
  • QTextStream & operator<< ( QCharc )
  • QTextStream & operator<< ( charc )
  • QTextStream & operator<< ( signedshorti )
  • QTextStream & operator<< ( unsignedshorti )
  • QTextStream & operator<< ( signedinti )
  • QTextStream & operator<< ( unsignedinti )
  • QTextStream & operator<< ( signedlongi )
  • QTextStream & operator<< ( unsignedlongi )
  • QTextStream & operator<< ( floatf )
  • QTextStream & operator<< ( doublef )
  • QTextStream & operator<< ( constchar*s )
  • QTextStream & operator<< ( constQString&s )
  • QTextStream & operator<< ( constQCString&s )
  • QTextStream & operator<< ( void*ptr )
  • QTextStream & readRawBytes ( char*s, uintlen )
  • QTextStream & writeRawBytes ( constchar*s, uintlen )
  • QString readLine ()
  • QString read ()
  • void skipWhiteSpace ()
  • int flags () const
  • int flags ( intf )
  • int setf ( intbits )
  • int setf ( intbits, intmask )
  • int unsetf ( intbits )
  • void reset ()
  • int width () const
  • int width ( intw )
  • int fill () const
  • int fill ( intf )
  • int precision () const
  • int precision ( intp )

详细描述

QTextStream类提供了使用QIODevice读写文本的基本功能。

文本流类的功能界面和标准的C++的iostream类非常相似。iostream和QTextStream的不同点是我们的流操作在一个很容易被继承的QIODevice上,而iostream只能操作一个不能被继承的FILE *指针。

Qt提供了几个和iostream相似的全局函数:

  • bin设置QTextStream来读/写二进制数字
  • oct设置QTextStream来读/写八进制数字
  • dec设置QTextStream来读/写十进制数字
  • hex设置QTextStream来读/写十六进制数字
  • endl强制换行
  • flush强制QIODevice刷新任何被缓存的数据
  • ws作为任何可用的控制符(在输入的时候)
  • reset重新设置QTextStream为它的缺省模式(请见reset())
  • qSetW(int)设置字段宽度作为指定参数
  • qSetFill(int)设置填充字符作为指定参数
  • qSetPrecision(int)设置精确度作为指定参数

警告:默认情况下,QTextStream在读取流的时候,会自动地检测流中的数字是十进制、八进制、十六进制或者二进制格式。具体情况是,一个以“0”为开头的数字是八进制的,比如顺序为“0100”将会被解释为64。

QTextStream类读写文本,它不适合处理二进制数据(而QDataStream是适合的)。

默认情况下,输出的是使用本地8位编码后的Unicode文本(比如,QString)。这些可以使用setEncoding()方法进行改变。对于输入,QTextStream会自动检测标准Unicode“字节顺序标记的”文本文件,否则会使用本地8位编码。

QIODevice在构造函数中被设置,或者之后在setDevice()中使用。如果输入到达了atEnd(),返回真。数据可以使用operator>>()重载操作符读到适当类型的变量中,或者使用read()把它作为整个部分读到一个单一的字符串中,或者使用readLine()把一次读一行。使用skipWhiteSpace()可以忽略控制符。你可以使用flags()或setf()来设置流的标记。这个流也支持width()、precision()和 fill(),使用reset()可以重新恢复默认设置。

也可以参考QDataStream、输入/输出和网络和文本相关类.


成员类型文档

QTextStream::Encoding

  • QTextStream::Locale
  • QTextStream::Latin1
  • QTextStream::Unicode
  • QTextStream::UnicodeNetworkOrder
  • QTextStream::UnicodeReverse
  • QTextStream::RawUnicode
  • QTextStream::UnicodeUTF8


成员函数文档

QTextStream::QTextStream ()

构造一个没有IO设备的文本流。

QTextStream::QTextStream ( QIODevice*iod )

构造一个使用iodIO设备的文本流。

QTextStream::QTextStream ( QString*str, intfilemode )

构造一个通过内部设备操作UnicodeQString的str的文本流。filemode参数会被传递给设备的open()函数,请参考QIODevice::mode()。

如果你使用setEncoding()或setCodec()来设置一个编码或者编码器,当文本流在QString上操作时,这个设置将被忽略。

实例:

    QString str;
    QTextStream ts( &str, IO_WriteOnly );
    ts << "pi = " << 3.14; // str == "pi = 3.14"
  

写数据到文本流将会修改字符串的内容。如果所写的内容超过字符串的范围,字符串会被扩大。注意字符串不会被截短。

    QString str = "pi = 3.14";
    QTextStream ts( &str, IO_WriteOnly );
    ts <<  "2+2 = " << 2+2; // str == "2+2 = 414"
  

注意因为QString是Unicode的,你不应该在这样的流上使用readRawBytes()或writeRawBytes()。

QTextStream::QTextStream ( QString&str, intfilemode )

这个函数是废弃的。它的提供只是为了保证旧代码能够工作。我们强烈建议在新代码中不要使用它。

这个构造函数和使用一个QString*参数的构造函数一样。

QTextStream::QTextStream ( QByteArraya, intmode )

构造一个通过内部QBuffer设备操作字节数组a的文本流。filemode参数会被传递给设备的open()函数,请参考QIODevice::mode()。

实例:

    QByteArray array;
    QTextStream ts( array, IO_WriteOnly );
    ts << "pi = " << 3.14 << '\0'; // array == "pi = 3.14"
  

写数据到文本流将会修改数组的内容。如果所写的内容超过数组的范围,数组会被扩大。

同样的实例,使用QBuffer:

    QByteArray array;
    QBuffer buf( array );
    buf.open( IO_WriteOnly );
    QTextStream ts( &buf );
    ts << "pi = " << 3.14 << '\0'; // array == "pi = 3.14"
    buf.close();
  

QTextStream::QTextStream ( FILE*fh, intmode )

构造一个通过内部的QFile设备操作已经存在的文件句柄fh的文本流。filemode参数会被传递给设备的open()函数,请参考QIODevice::mode()。

注意如果你创建了一个QTextStreamcout或者也被其他类型的另一个变量使用的另一个名称,一些连接器也许会搞混这两个变量,这经常会导致程序崩溃。

QTextStream::~QTextStream () [虚]

销毁这个文本流。

这个析构函数对当前IO设备没有任何影响。

bool QTextStream::atEnd () const

如果IO设备已经达到终点(流或文件的终点),或者如果没有IO设备被设置,返回真,否则返回假。

也可以参考QIODevice::atEnd()。

实例:addressbook/centralwidget.cpp和grapher/grapher.cpp。

QIODevice* QTextStream::device () const

返回当前设置的IO设备。

也可以参考setDevice()和unsetDevice()。

bool QTextStream::eof () const

这个函数是废弃的。它的提供只是为了保证旧代码能够工作。我们强烈建议在新代码中不要使用它。

这个函数已经被重新命名为atEnd()。

也可以参考QIODevice::atEnd()。

实例:chart/chartform_files.cpp。

int QTextStream::fill () const

返回填充字符。默认值是“ ”(空格)。

int QTextStream::fill ( intf )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

设置填充字符为f。返回以前的填充字符。

int QTextStream::flags () const

返回当前的流标记。默认值为0。

标记的意义是:

  • skipws - 当前不被使用了,控制符总是被忽略
  • left - 数字字段左对齐
  • right - 当前不被使用了(默认情况下,数字字段是右对齐的)
  • internal - 在+/-和值的中间填充空格
  • bin - 输入输出只使用二进制
  • oct - 输入输出只使用八进制
  • dec - 输入输出只使用十进制
  • hex - 输入输出只使用十六进制
  • showbase - 如果使用binocthex格式,数字输出使用0b、0和0x注释
  • showpoint - 当前不被使用了
  • uppercase - 使用0B和0X,而不用0b和0x
  • showpos - 对正数显示+
  • scientific - 对浮点数使用科学记数法
  • fixed - 对浮点数使用固定的位数

注意,如果没有设置binoctdechex,那么一个以0开始的值被认为是八进制的,以0x开始的被认为是十六进制的,以0b开始的被认为是二进制的,其它的都被认为是十进制的。

也可以参考setf()和unsetf()。

int QTextStream::flags ( intf )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

设置流标记为f。返回以前的流标记。

也可以参考setf()和unsetf()。

QTextStream& QTextStream::operator<< ( QCharc )

字符c到流中并且返回流的引用。

字符c不依赖于QTextStream的编码设置,被假设为Latin1编码。

QTextStream& QTextStream::operator<< ( charc )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

字符c到流中并且返回流的引用。

QTextStream& QTextStream::operator<< ( signedshorti )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

短整型i到流中并且返回流的引用。

QTextStream& QTextStream::operator<< ( unsignedshorti )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

无符号的短整型i到流中并且返回流的引用。

QTextStream& QTextStream::operator<< ( signedinti )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

有符号的整型i到流中并且返回流的引用。

QTextStream& QTextStream::operator<< ( unsignedinti )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

无符号的整型i到流中并且返回流的引用。

QTextStream& QTextStream::operator<< ( signedlongi )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

有符号的长整型i到流中并且返回流的引用。

QTextStream& QTextStream::operator<< ( unsignedlongi )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

无符号的长整型i到流中并且返回流的引用。

QTextStream& QTextStream::operator<< ( floatf )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

单精实型f到流中并且返回流的引用。

QTextStream& QTextStream::operator<< ( doublef )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

双精实型f到流中并且返回流的引用。

QTextStream& QTextStream::operator<< ( constchar*s )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

写一个字符串到流中并且返回流的引用。

字符串s不依赖于QTextStream的编码设置,被假设为Latin1编码。

QTextStream& QTextStream::operator<< ( constQString&s )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

写一个s到流中并且返回流的引用。

QTextStream& QTextStream::operator<< ( constQCString&s )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

写一个s到流中并且返回流的引用。

字符串s不依赖于QTextStream的编码设置,被假设为Latin1编码。

QTextStream& QTextStream::operator<< ( void*ptr )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

写一个指针到流中并且返回流的引用。

ptr是被作为十六进制的无符号的长整型输出的。

QTextStream& QTextStream::operator>> ( QChar&c )

从流中读取一个字符c并且返回流的引用。 注意控制符被忽略。

QTextStream& QTextStream::operator>> ( char&c )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

从流中读取一个字符c并且返回流的引用。

QTextStream& QTextStream::operator>> ( signedshort&i )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

从流中读取一个短整型i并且返回流的引用。对于所希望的输入格式的说明,请参考flags()。

QTextStream& QTextStream::operator>> ( unsignedshort&i )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

从流中读取一个无符号的短整型i并且返回流的引用。对于所希望的输入格式的说明,请参考flags()。

QTextStream& QTextStream::operator>> ( signedint&i )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

从流中读取一个有符号的整型i并且返回流的引用。对于所希望的输入格式的说明,请参考flags()。

QTextStream& QTextStream::operator>> ( unsignedint&i )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

从流中读取一个无符号的整型i并且返回流的引用。对于所希望的输入格式的说明,请参考flags()。

QTextStream& QTextStream::operator>> ( signedlong&i )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

从流中读取一个有符号的长整型i并且返回流的引用。对于所希望的输入格式的说明,请参考flags()。

QTextStream& QTextStream::operator>> ( unsignedlong&i )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

从流中读取一个无符号的长整型i并且返回流的引用。对于所希望的输入格式的说明,请参考flags()。

QTextStream& QTextStream::operator>> ( float&f )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

从流中读取一个单精实型f并且返回流的引用。对于所希望的输入格式的说明,请参考flags()。

QTextStream& QTextStream::operator>> ( double&f )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

从流中读取一个双精实型f并且返回流的引用。对于所希望的输入格式的说明,请参考flags()。

QTextStream& QTextStream::operator>> ( char*s )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

从流中读取一个“词”s并且返回流的引用。对于所希望的输入格式的说明。

一个词是由isspace()返回假的字符组成。

QTextStream& QTextStream::operator>> ( QString&str )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

从流中读取一个“词”str并且返回流的引用。对于所希望的输入格式的说明。

一个词是由isspace()返回假的字符组成。

QTextStream& QTextStream::operator>> ( QCString&str )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

从流中读取一个“词”str并且返回流的引用。对于所希望的输入格式的说明。

一个词是由isspace()返回假的字符组成。

int QTextStream::precision () const

返回精确度。默认值为6。

int QTextStream::precision ( intp )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

设置精确度为p。返回以前设置的精确度。

QString QTextStream::read ()

读取整个流并且返回包含文本的字符串。

也可以参考QIODevice::readLine().

实例:action/application.cpp、application/application.cpp、mdi/application.cpp、qdir/qdir.cpp和qwerty/qwerty.cpp。

QString QTextStream::readLine ()

读取流中的一行并且返回包含文本的字符串。

返回的字符串不包含任何换行符和回车符。注意这是和QIODevice::readLine()不一样的,后者不会省略一行最后的换行符。

在EOF处,你会得到一个零QString。在读取一个空行时你得到的QString是空的,但不是零。

也可以参考QIODevice::readLine()。

实例:addressbook/centralwidget.cpp和chart/element.cpp。

QTextStream& QTextStream::readRawBytes ( char*s, uintlen )

从流中读取len字节放到s中并且返回流的引用。

缓存s必须被预先分配。

注意这个函数中不使用任何编码方式。

警告:除非流的编码方式被设置为Unicode或者Latin1,这个函数的行为会是不确定的。

也可以参考QIODevice::readBlock()。

void QTextStream::reset ()

重新设置文本流为默认设置。

  • 所有标记被设置为0。
  • 所有字段宽度被设置为0。
  • 所有填充字符被设置为“ ”(空格)。
  • 精确度被设置为6。

也可以参考setf()、width()、fill()和precision()。

void QTextStream::setCodec ( QTextCodec*codec )

设置流的编码器为codec。如果不设置,会自动设置为Unicode。

注意这个函数的调用应该发生在这个流进行读/写数据之前。

也可以参考setEncoding()。

实例:qwerty/qwerty.cpp。

void QTextStream::setDevice ( QIODevice*iod )

设置IO设备为iod

也可以参考device()和unsetDevice()。

void QTextStream::setEncoding ( Encodinge )

设置这个流的编码为ee为下列之一:
  • Locale - 使用本地文件格式(如果本地没有设置,就是Latin1),但是会在输入时自动检测是否Unicode(utf16)。
  • Unicode - 使用Unicode(utf16)作为输入和输出。输出将会根据当前平台中最有效率的顺序写出来(比如,QString内部使用的顺序)。
  • UnicodeUTF8 - 使用Unicode(utf8)作为输入和输出。如果使用它作为输入,它将会自动检测是否utf16,如果是的话,将会使用它代替utf8。
  • Latin1 - ISO-8859-1。将不会自动检测utf16。
  • UnicodeNetworkOrder - 使用网络顺序的Unicode(utf16)作为输入和输出。当读取不使用字节顺序标记的Unicode的时候是有用的。
  • UnicodeReverse - 使用与网络顺序相反的顺序的Unicode(utf16)作为输入和输出。当读取不使用字节顺序标记或者当写供bug很多的Windows应用程序读取的数据的Unicode的时候是有用的。
  • RawUnicode - 就像Unicode,但是不写字节顺序标记,也不自动检测字节顺序标记。只有当写供一个单独进程使用的非永久保存的数据的时候是有用的。

Locale和所有的Unicode编码,除了RawUnicode,都将看输入流的头两个字节来决定字节顺序。这个初始的字节顺序标记将会在读数据之前省略掉。

注意这个函数的调用应该发生在这个流进行读/写数据之前。

也可以参考setCodec()。

实例:network/httpd/httpd.cpp和qwerty/qwerty.cpp。

int QTextStream::setf ( intbits )

设置流的标记位为bits。返回以前设置的流标记。

flags( flags() | bits )是一样的。

也可以参考unsetf()。

int QTextStream::setf ( intbits, intmask )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。 设置流的标记位为bits和一个位掩码mask。返回以前设置的流标记。

flags( (flags() & ~mask) | (bits & mask) )是一样的。

也可以参考unsetf()。

void QTextStream::skipWhiteSpace ()

放置读指针在第一个非控制字符上。

void QTextStream::unsetDevice ()

清除IO设备。这个和调用setDevice( 0 )一样。

也可以参考device()和setDevice()。

int QTextStream::unsetf ( intbits )

清空流标记位bits。返回以前设置的流标记。

flags( flags() & ~mask )是一样的。

也可以参考setf()。

int QTextStream::width () const

返回字段宽度。默认值为0。

int QTextStream::width ( intw )

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

设置字段宽度为w。返回以前设置的字段宽度。

QTextStream& QTextStream::writeRawBytes ( constchar*s, uintlen )

slen字节到流中并且返回流的引用。

注意这个函数没有使用任何编码。

也可以参考QIODevice::writeBlock()。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文