Qt的流框架

来源:互联网 发布:中国法律数据库app 编辑:程序博客网 时间:2024/05/16 19:49



Qt的流框架包含两个核心类QTextStream以及QDataStream,如果所示。

      (1)QTextStream将程序中的数据转换为文本格式,输出到一个QString,QIODevice或QByteArray对象。该类还可以做反方向的读取操作,读取这些对象中存放的文本数据,将这些数据转化为程序中的数据。也就是说,QTextStream对数据进行文本格式的输入/输出,在其内部使用两个字节长的QChar类型存放每个字符,使用Unicode编码格式。优点:大大简化了Qt流的总体结构。缺点:在内存中占用两个字节,即使被处理的字符只有一字节;难以处理超过65536个字符的字符集。

QTextCodec负责Unicode与各种字符编码方式之间的转换。一个QTextStream对象指向一个QTextCodec对象。利用这个类,QTextStream可以将文本数据转换为各种字符编码的数据,存放在QIODevice或者QByteArray中。读取数据时,QTextStream也可以将这些设备中具有某种字符编码的数据转换为Unicode编码的数据。

QLocale负责实现各种区域文化。一个QTextStream对象指向一个QLocale对象。利用这个类,QTextStream以某种区域文化输出或者输入文本数据。比如,一旦设定QTextStream的区域文化为德语,浮点数“123.456”将被输出为“123,456"。

QTextStream的成员函数setLocale()用于设置数据输入输出时的区域文化。 

使用注意:当读取一个QTextStream对象时,应该使用成员函数atEnd()判读是否抵达流的末端。

       (2)QDataStream对数据进行二进制格式的输入/输出。由于QString只存放字符数据,QDataStream的数据源或者输出目标只能是QIODevice或者QByteArray。

QDataStream的丰富功能:

        1.统一的字节序,在默认情况下,写入QDataStream的整数都会被转换big-endian字节序,再写入文件。读取时做反向的转换。当然,我们也可以调用其成员函数setByteOrder()

将字节序设置为little-endian。

        2.支持多种Qt类型的输入、输出。包括C++的标准类型如int, double等,也处理QByteArray,QFont, QImage, QPixmap,以及QString, 甚至可以处理QList QMap这些复杂内部结构的类模板。

        3.支持运算符“>>”以及“<<。通过运算符重载机制,施加在QDataStream的“>>”以及“<<”以二进制方式进行读写操作。

使用说明:创建一个对文件进行存取操作的QDataStream对象需要定义一个QFile对象,调用其成员函数open()打开一个文件,再定义一个QDataStream对象,在构造函数中将它和前面定义的QFile对象绑定。

        QIODevice具有6个子类。

        a) 最常用的是QFile,负责文件的处理。

常用操作步骤如下:以文件名位参数构建一个QFile对象。如果文件名中有子目录,子目录之间的分隔符用‘/’。在对一个文件进行读/写之前,用其成员函数open()打开该文件。对文本文件使用QIODevice::Text。成员函数read()、readLine()或者readAll()从该文件读取数据,用write()向该文件写入数据。读取数据时,成员函数atEnd()判断是否已经抵达文件末尾。完成所有写入操作后,掉用成员函数close()关闭文件。

        b)QTemporaryFile创建并访问临时文件。

        c)QBuffer负责以QIODevice的接口访问一个QByteArray对象。QTextStream和QDataStream都可以直接将一个QByteArray对象作为数据源或者输出目标,只不过QBuffer能够在内部数据变化时发出信号。通过Qt的信号与槽机制,与这些信号相连的对象就能够及时地处理变化的数据。

        d)QProcess负责以进程的形式启动一个外部程序,并和该进程进行通信。

        e)QTcpSocket负责使用TCP协议进行网络数据的发送和接收。

        f)QUdpSocket负责使用UDP协议进行网络数据的发送和接收。

0 0
原创粉丝点击