QDataStream 类的用法和 QTextStream 非常类似,最主要的区别在于,QDataStream 用于读写二进制文件。 使用 QDataStream 类之前,程序中要引入<QDataStream>头文件。 创建 QDataStream 对象常用的构造函数为: QDataStream::QDataStream(QIODevice *d) 下表罗列了 QDataStream 类常用的成员方法: 成员方法 功 QDataStream &QDataStream::readBytes(char *&s, uint &l) 对于用 writeBytes() 方法写入文件的 l 和 s,只能使用 readBytes( QDataStream 类也对<<和>>进行了重载,举个简单的例子,用 QDataStream 重新实现实例二: #include <QFile> #include <QDebug> #include
name;};QDataStream &operator<<(QDataStream &out, const Data &data) { out << data.id << data.name; >#include <QDebug>struct Data { int id; QString name;};QDataStream &operator>>(QDataStream &in, >#include <QDebug>struct Data { int id; QString name;};QDataStream &operator<<(QDataStream &out , const Data &data) { out << data.id << data.name; return out;}QDataStream &operator>>(QDataStream 通过QDataStream类,我们可以高效地读写二进制数据。
02、QDataStream>>>QDataStream是Qt框架中的一个类,主要用于在Qt中以流的方式读写二进制数据。 QDataStream通常与QFile、QTcpSocket等类一起使用,以便于文件和网络通信中的数据操作。QDataStream的主要功能数据序列化:将数据类型转换为字节流,以便存储或传输。 常用函数以下是QDataStream的一些常用函数:构造函数:QDataStream(QIODevice *device): 创建一个数据流对象,关联到指定的设备(如文件、套接字等)。 QDataStream &operator<<(int i): 将整型数据写入数据流。QDataStream &operator<<(double d): 将浮点型数据写入数据流。 其他功能:QDataStream &operator>>(QDataStream &stream): 将数据流对象复制到另一个数据流。
序列化到ByteData中,接收端同样的方法从QDataStream中解析出来原数据 sendStruct(){ Type=0; Description=""; ByteData=QByteArray & operator <<(QDataStream& out,const sendStruct& senstruct) { out<<senstruct.Type & operator >>(QDataStream& in,sendStruct& senstruct) { in>>senstruct.Type =QAbstractSocket::ConnectedState) return; QDataStream out(m_tcpsocket); out =QAbstractSocket::ConnectedState) return; QDataStream out(m_tcpsocket); out
; return; } ///获取文件大小 this->totalBytes = localFile->size(); QDataStream sendout(&outBlock ,QIODevice::WriteOnly); sendout.setVersion(QDataStream::Qt_4_8); QString currentFileName = filename.right { localFile->close(); //fileSocket->close(); } } void QtClient::updateFileProgress() { QDataStream inFile(this->fileSocket); inFile.setVersion(QDataStream::Qt_4_8); ///如果接收到的数据小于16个字节,保存到来的文件头结构 inFile(this->filesocket); inFile.setVersion(QDataStream::Qt_4_8); ///如果接收到的数据小于16个字节,保存到来的文件头结构
QT内置的QDataStream 类提供了串行化处理数据流的方法。数据流是一个编码信息的二进制流,它与主机的操作系统、CPU 或字节顺序 100%的没有关系。 QT内置的QTextStream 和 QDataStream 都是面向数据流的, QTextStream 可以完成的功能 QDataStream 都能完成,但是他们的侧重点不同。 这些二进制数据的处理,就需要使用 QDataStream 实现。 QDataStream 可以将所有的 C++ 基本类型,包括 QT 自己封装的类型,按顺序分解成基本类型进行封装。 QCoreApplication::applicationDirPath()+"/"+ConfigFile; QFile filesrc(text); filesrc.open(QIODevice::WriteOnly); QDataStream ConfigFile; //判断文件是否存在 if(QFile::exists(text)) { QFile filenew(text); filenew.open(QIODevice::ReadOnly); QDataStream
辅助类 QTextStream 将写入的数据全部转换为可读文本(适用于文本文件) QDataStream 将写入的数据根据类型转换为二进制数据(适用于数据文件) 注意 QDataStream在不同版本中 ,数据格式可能不同,所以数据文件如果要在不同版本QT程序间传递,还需要考虑版本问题: void setVersion(int v); //设置读写版本号,比如4.7版本,则填入: QDataStream QDataStream使用示例 QFile file("C:/Users/Administrator/Desktop/test.txt"); if( file.open(QIODevice ::WriteOnly) ) { QDataStream out(&file); out.setVersion(QDataStream::Qt_4_7); < 1.34; buffer.close(); } if(buffer.open(QIODevice::ReadOnly)) { QDataStream
QDataStream &operator>>(QDataStream &in, QPair<T1, T2> &pair) QDataStream &operator<<(QDataStream &out
QTcpSocket 继承自 QIODevice,所以它可以从 QDataStream 或 QTextStream中读取或写入数据。 (QDataStream::Qt_4_1); out << quint16(0) << quint8('S') << fromComboBox->currentText() << toComboBox- void TripPlanner::updateTableWidget() { QDataStream in(&tcpSocket); in.setVersion(QDataStream::Qt_4_1 in(this); in.setVersion(QDataStream::Qt_4_1); if (nextBlockSize == 0) { if (bytesAvailable() < sizeof out(&block, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_4_1); quint16 duration = rand() %
处理文本文件和二进制文件,可以使用QTextStream类和QDataStream类。 (); } 操作二进制文件 #include <QCoreApplication> #include<QFile> #include<QDebug> #include<QDate> #include<QDataStream binFile("info.bat"); if(binFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) { QDataStream binFile.setFileName("info.bat");//指明要操作的文件 if(binFile.open(QIODevice::ReadOnly)) { QDataStream
②发送图像拆包 QByteArray dataPackage; // command 0 ,package total size QDataStream dataHead(&dataPackage 主要涉及到Qt一些数据类型的转换,如将整型字节存入QByteArray 中使用QDataStream 。之后将数据包大小重新设置为40960,方便服务器处理粘包。 ; //command 3 QDataStream dataTail(&dataPackage,QIODevice::ReadWrite); dataTail << quint16 number(m_imageCount); ui->textEdit->append(number); QByteArray cmdId = imageArray.left(2); QDataStream commandId >> size; if(0 == size) { QByteArray cmdId = imageArray.mid(6,9); QDataStream
DragTreeWidget.h" #include <QMouseEvent> #include <QTreeWidgetItem> #include <QByteArray> #include <QDataStream { if (event->button()&Qt::LeftButton){ _selectItem = itemAt(event->pos()); QByteArray dataItem; QDataStream hasFormat("Data/name")) { //获取拖拽时设置的数据 QByteArray itemData = event->mimeData()->data("Data/name"); QDataStream
QFile可以单独使用,或者更方便地与QTextStream或QDataStream一起使用。 文件名通常在构造函数中传递,但它可以在任何时候使用setFileName()设置。 数据通常使用QDataStream或QTextStream进行读写,但您也可以调用qiodevice继承的函数read()、readLine()、readAll()和write()。 Text)) return; QTextStream out(&file); out << "The magic number is: " << 49 << "\n"; QDataStream 请参见QTextStream、QDataStream、QFileInfo、QDir和Qt资源系统。
pieceData = event.mimeData().data('image/x-puzzle-piece') dataStream = QtCore.QDataStream -= 1 self.update(square) itemData = QtCore.QByteArray() dataStream = QtCore.QDataStream pieceData = event.mimeData().data('image/x-puzzle-piece') dataStream = QtCore.QDataStream item = self.currentItem() itemData = QtCore.QByteArray() dataStream = QtCore.QDataStream
代码如下: import functools import random import sys from PyQt5.QtCore import (QByteArray, QDataStream, QFile None: return self.copiedItem.clear() self.pasteOffset = 5 stream = QDataStream item def paste(self): if self.copiedItem.isEmpty(): return stream = QDataStream (fh) stream.setVersion(QDataStream.Qt_5_7) magic = stream.readInt32() (fh) #创建数据流 stream.setVersion(QDataStream.Qt_5_7) stream.writeInt32(MagicNumber
fileName).arg(locFile->errorString())); return; } totalBytes = locFile->size(); QDataStream sendOut(&outBlock, QIODevice::WriteOnly); sendOut.setVersion(QDataStream::Qt_4_7); time.start fileName).arg(locFile->errorString())); return; } totalBytes = locFile->size(); QDataStream sendOut(&outBlock, QIODevice::WriteOnly); sendOut.setVersion(QDataStream::Qt_4_7); time.start in(tClnt); in.setVersion(QDataStream::Qt_4_7); float useTime = time.elapsed(); if (bytesReceived
广播发送信息 void Widget::sendMessage(MessageType type, QString serverAddress) { QByteArray data; QDataStream >pendingDatagramSize()); udpSocket->readDatagram(datagram.data(), datagram.size()); QDataStream return; } TotalBytes = localFile->size();//文件总大小 //头文件中的定义QByteArray outBlock; QDataStream sendOut(&outBlock, QIODevice::WriteOnly);//设置输出流属性 sendOut.setVersion(QDataStream::Qt_4_7);//设置Qt in(tcpClient); //这里的QDataStream可以直接用QTcpSocket对象做参数 in.setVersion(QDataStream::Qt_4_7); float
QListWidgetItem from PyQt5.QtGui import QIcon ,QDrag from PyQt5.QtCore import Qt, QSize , QByteArray, QDataStream icon = item.icon() #这里可以创建自定义数据可供在拖动事件中使用 data = QByteArray() stream = QDataStream application/x-阿猫'): data = event.mimeData().data('application/x-阿猫') stream = QDataStream
接下来,使用QDataStream将图像流式传输到QBuffer中。设置大小,然后我们将其用于create()我们的共享内存段。创建共享内存段会自动将该段附加到进程。 // load into shared memory QBuffer buffer; buffer.open(QBuffer::ReadWrite); QDataStream out "Load an image first.")); return; } QBuffer buffer; QDataStream
{ return strName == oContact.strName && strAddress == oContact.strAddress; } }; 接下来是一段重载QDataStream //输出 inline QDataStream& operator<<(QDataStream& stream,const Contact& oContact) { return stream << oContact.strName << oContact.strAddress; } //输入 inline QDataStream& operator>>(QDataStream& stream 联系人列表的内容使用QDataStream写入文件。如果文件无法打开,则会显示一个QMessageBox,并显示相关的错误消息。 QDataStream用于将.dat文件的内容读入联系人列表,每个联系人都是使用addEntry()添加的。这里就用到了开始的时候定义的QDataStream重载输入、输入操作符。