QTextStream类参考
QTextStream类提供了使用QIODevice读写文本的基本功能。
详情请见……
#include <qtextstream.h>
由QTextIStream和QTextOStream继承。
所有成员函数的列表。
公有成员
详细描述
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, int filemode )
构造一个通过内部设备操作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, int filemode )
这个函数是废弃的。它的提供只是为了保证旧代码能够工作。我们强烈建议在新代码中不要使用它。
这个构造函数和使用一个QString*参数的构造函数一样。
QTextStream::QTextStream ( QByteArray a, int mode )
构造一个通过内部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, int mode )
构造一个通过内部的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 ( int f )
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
设置填充字符为f。返回以前的填充字符。
int QTextStream::flags () const
返回当前的流标记。默认值为0。
标记的意义是:
- skipws - 当前不被使用了,控制符总是被忽略
- left - 数字字段左对齐
- right - 当前不被使用了(默认情况下,数字字段是右对齐的)
- internal - 在+/-和值的中间填充空格
- bin - 输入和输出只使用二进制
- oct - 输入和输出只使用八进制
- dec - 输入和输出只使用十进制
- hex - 输入和输出只使用十六进制
- showbase - 如果使用bin、oct或hex格式,数字输出使用0b、0和0x注释
- showpoint - 当前不被使用了
- uppercase - 使用0B和0X,而不用0b和0x
- showpos - 对正数显示+
- scientific - 对浮点数使用科学记数法
- fixed - 对浮点数使用固定的位数
注意,如果没有设置bin、oct、dec或hex,那么一个以0开始的值被认为是八进制的,以0x开始的被认为是十六进制的,以0b开始的被认为是二进制的,其它的都被认为是十进制的。
也可以参考setf()和unsetf()。
int QTextStream::flags ( int f )
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
设置流标记为f。返回以前的流标记。
也可以参考setf()和unsetf()。
QTextStream & QTextStream::operator<< ( QChar c )
写字符c到流中并且返回流的引用。
字符c不依赖于QTextStream的编码设置,被假设为Latin1编码。
QTextStream & QTextStream::operator<< ( char c )
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
写字符c到流中并且返回流的引用。
QTextStream & QTextStream::operator<< ( signed short i )
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
写短整型i到流中并且返回流的引用。
QTextStream & QTextStream::operator<< ( unsigned short i )
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
写无符号的短整型i到流中并且返回流的引用。
QTextStream & QTextStream::operator<< ( signed int i )
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
写有符号的整型i到流中并且返回流的引用。
QTextStream & QTextStream::operator<< ( unsigned int i )
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
写无符号的整型i到流中并且返回流的引用。
QTextStream & QTextStream::operator<< ( signed long i )
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
写有符号的长整型i到流中并且返回流的引用。
QTextStream & QTextStream::operator<< ( unsigned long i )
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
写无符号的长整型i到流中并且返回流的引用。
QTextStream & QTextStream::operator<< ( float f )
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
写单精实型f到流中并且返回流的引用。
QTextStream & QTextStream::operator<< ( double f )
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
写双精实型f到流中并且返回流的引用。
QTextStream & QTextStream::operator<< ( const char * s )
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
写一个字符串到流中并且返回流的引用。
字符串s不依赖于QTextStream的编码设置,被假设为Latin1编码。
QTextStream & QTextStream::operator<< ( const QString & s )
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
写一个s到流中并且返回流的引用。
QTextStream & QTextStream::operator<< ( const QCString & 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>> ( signed short & i )
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
从流中读取一个短整型i并且返回流的引用。对于所希望的输入格式的说明,请参考flags()。
QTextStream & QTextStream::operator>> ( unsigned short & i )
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
从流中读取一个无符号的短整型i并且返回流的引用。对于所希望的输入格式的说明,请参考flags()。
QTextStream & QTextStream::operator>> ( signed int & i )
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
从流中读取一个有符号的整型i并且返回流的引用。对于所希望的输入格式的说明,请参考flags()。
QTextStream & QTextStream::operator>> ( unsigned int & i )
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
从流中读取一个无符号的整型i并且返回流的引用。对于所希望的输入格式的说明,请参考flags()。
QTextStream & QTextStream::operator>> ( signed long & i )
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
从流中读取一个有符号的长整型i并且返回流的引用。对于所希望的输入格式的说明,请参考flags()。
QTextStream & QTextStream::operator>> ( unsigned long & 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()返回假的字符组成。
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
从流中读取一个“词”str并且返回流的引用。对于所希望的输入格式的说明。
一个词是由isspace()返回假的字符组成。
int QTextStream::precision () const
返回精确度。默认值为6。
int QTextStream::precision ( int p )
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
设置精确度为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, uint len )
从流中读取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 ( Encoding e )
设置这个流的编码为e,e为下列之一:
- 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 ( int bits )
设置流的标记位为bits。返回以前设置的流标记。
和flags( flags() | bits )是一样的。
也可以参考unsetf()。
int QTextStream::setf ( int bits, int mask )
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
设置流的标记位为bits和一个位掩码mask。返回以前设置的流标记。
和flags( (flags() & ~mask) | (bits & mask) )是一样的。
也可以参考unsetf()。
void QTextStream::skipWhiteSpace ()
放置读指针在第一个非控制字符上。
void QTextStream::unsetDevice ()
清除IO设备。这个和调用setDevice( 0 )一样。
也可以参考device()和setDevice()。
int QTextStream::unsetf ( int bits )
清空流标记位bits。返回以前设置的流标记。
和flags( flags() & ~mask )是一样的。
也可以参考setf()。
int QTextStream::width () const
返回字段宽度。默认值为0。
int QTextStream::width ( int w )
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
设置字段宽度为w。返回以前设置的字段宽度。
QTextStream & QTextStream::writeRawBytes ( const char * s, uint len )
从s写len字节到流中并且返回流的引用。
注意这个函数没有使用任何编码。
也可以参考QIODevice::writeBlock()。
这个文件是Qt工具包一部分。
版权所有 © 1995-2002
Trolltech。保留所有权利。