Serializing Qt Data Types

版本 13开始, QDataStream允许你序列化下述数据类型.

读写数据时, 最好先将整数转换成Qt的整数类型(如qint16或quint32). 这样确保无论应用程序运行在哪个平台或体系结构, 都能准确知道你读写数据的整数大小.

bool
  • boolean
qint8
  • signed byte
qint16
  • signed 16-bit integer
qint32
  • signed 32-bit integer
qint64
  • signed 64-bit integer
quint8
  • unsigned byte
quint16
  • unsigned 16-bit integer
quint32
  • unsigned 32-bit integer
quint64
  • unsigned 64-bit integer
float
  • 32-bit floating point number using the standard IEEE 754 format
double
  • 64-bit floating point number using the standard IEEE 754 format
const char *
  • The string length (quint32)
  • The string bytes, excluding the terminating 0
QBitArray
  • The array size (quint32)
  • The array bits, i.e. (size + 7)/8 bytes
QBrush
  • The brush style (quint8)
  • The brush color (QColor)
  • If style is CustomPattern, the brush pixmap (QPixmap)
QByteArray
  • If the byte array is null: 0xFFFFFFFF (quint32)
  • Otherwise: the array size (quint32) followed by the array bytes, i.e. size bytes
QColor
  • Color spec (qint8)
  • Alpha value (quint16)
  • Red value (quint16)
  • Green value (quint16)
  • Blue value (quint16)
  • Pad value (quint16)
QCursor
  • Shape ID (qint16)
  • If shape is BitmapCursor: The bitmap (QPixmap), mask (QPixmap), and hot spot (QPoint)
QDate
  • Julian day (quint32)
QDateTime
QEasingCurve
  • type (quint8)
  • func (quint64)
  • hasConfig (bool)
  • If hasConfig is true then these fields follow:
  • list
  • period (double)
  • amplitude (double)
  • overshoot (double)
QFont
  • The family (QString)
  • The style name (QString)
  • The point size (double)
  • The pixel size (qint32)
  • The style hint (quint8)
  • The style strategy (quint16)
  • The char set (quint8)
  • The weight (quint8)
  • The font bits (quint8)
  • The font stretch (quint16)
  • The extended font bits (quint8)
  • The letter spacing (double)
  • The word spacing (double)
  • The hinting preference (quint8)
QHash<Key, T>
  • The number of items (quint32)
  • For all items, the key (Key) and value (T)
QIcon
  • The number of pixmap entries (quint32)
  • For all pixmap entries:
QImage
  • If the image is null a "null image" marker is saved; otherwise the image is saved in PNG or BMP format (depending on the stream version). If you want control of the format, stream the image into a QBuffer (using QImageIOHandler/QImageIOPlugin) and stream that.
QKeySequence
  • A QList<int>, where each integer is a key in the key sequence
QLinkedList<T>
  • The number of items (quint32)
  • The items (T)
QList<T>
  • The number of items (quint32)
  • The items (T)
QMap<Key, T>
  • The number of items (quint32)
  • For all items, the key (Key) and value (T)
QMargins
  • left (int)
  • top (int)
  • right (int)
  • bottom (int)
QMatrix
  • m11 (double)
  • m12 (double)
  • m21 (double)
  • m22 (double)
  • dx (double)
  • dy (double)
QMatrix4x4
  • m11 (float)
  • m12 (float)
  • m13 (float)
  • m14 (float)
  • m21 (float)
  • m22 (float)
  • m23 (float)
  • m24 (float)
  • m31 (float)
  • m32 (float)
  • m33 (float)
  • m34 (float)
  • m41 (float)
  • m42 (float)
  • m43 (float)
  • m44 (float)
QPair<T1, T2>
  • first (T1)
  • second (T2)
QPaletteThe disabled, active, and inactive color groups, each of which consists of the following:
QPen
  • The pen styles (quint8)
  • The pen width (quint16)
  • The pen color (QColor)
QPicture
  • The size of the picture data (quint32)
  • The raw bytes of picture data (char)
QPixmap
  • Save it as a PNG image.
QPoint
  • The x coordinate (qint32)
  • The y coordinate (qint32)
QQuaternion
  • The scalar component (float)
  • The x coordinate (float)
  • The y coordinate (float)
  • The z coordinate (float)
QRect
  • left (qint32)
  • top (qint32)
  • right (qint32)
  • bottom (qint32)
QRegExp
  • The regexp pattern (QString)
  • Case sensitivity (quint8)
  • Regular expression syntax (quint8)
  • Minimal matching (quint8)
QRegularExpression
  • The regular expression pattern (QString)
  • The pattern options (quint32)
QRegion
  • The size of the data, i.e. 8 + 16 * (number of rectangles) (quint32)
  • 10 (qint32)
  • The number of rectangles (quint32)
  • The rectangles in sequential order (QRect)
QSize
  • width (qint32)
  • height (qint32)
QString
  • If the string is null: 0xFFFFFFFF (quint32)
  • Otherwise: The string length in bytes (quint32) followed by the data in UTF-16
QTime
  • Milliseconds since midnight (quint32)
QTransform
  • m11 (double)
  • m12 (double)
  • m13 (double)
  • m21 (double)
  • m22 (double)
  • m23 (double)
  • m31 (double)
  • m32 (double)
  • m33 (double)
QUrl
QVariant
  • The type of the data (quint32)
  • The null flag (qint8)
  • The data of the specified type
QVector2D
  • the x coordinate (float)
  • the y coordinate (float)
QVector3D
  • the x coordinate (float)
  • the y coordinate (float)
  • the z coordinate (float)
QVector4D
  • the x coordinate (float)
  • the y coordinate (float)
  • the z coordinate (float)
  • the w coordinate (float)
QVector<T>
  • The number of items (quint32)
  • The items (T)

参见 JSON Support in Qt.