Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qdatastream.h
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QDATASTREAM_H
5#define QDATASTREAM_H
6
7#include <QtCore/qscopedpointer.h>
8#include <QtCore/qiodevicebase.h>
9#include <QtCore/qcontainerfwd.h>
10#include <QtCore/qnamespace.h>
11
12#include <iterator> // std::distance(), std::next()
13
14#ifdef Status
15#error qdatastream.h must be included before any header file that defines Status
16#endif
17
19
20#if QT_CORE_REMOVED_SINCE(6, 3)
21class qfloat16;
22#endif
23class QByteArray;
24class QDataStream;
25class QIODevice;
26class QString;
27
28#if !defined(QT_NO_DATASTREAM)
30namespace QtPrivate {
31class StreamStateSaver;
32template <typename Container>
34template <typename Container>
36template <typename Container>
38template <typename Container>
40template <typename Container>
42template <typename Container>
44}
45class Q_CORE_EXPORT QDataStream : public QIODeviceBase
46{
47public:
49 Qt_1_0 = 1,
50 Qt_2_0 = 2,
51 Qt_2_1 = 3,
52 Qt_3_0 = 4,
53 Qt_3_1 = 5,
54 Qt_3_3 = 6,
55 Qt_4_0 = 7,
56 Qt_4_1 = Qt_4_0,
57 Qt_4_2 = 8,
58 Qt_4_3 = 9,
59 Qt_4_4 = 10,
60 Qt_4_5 = 11,
61 Qt_4_6 = 12,
62 Qt_4_7 = Qt_4_6,
63 Qt_4_8 = Qt_4_7,
64 Qt_4_9 = Qt_4_8,
65 Qt_5_0 = 13,
66 Qt_5_1 = 14,
67 Qt_5_2 = 15,
68 Qt_5_3 = Qt_5_2,
69 Qt_5_4 = 16,
70 Qt_5_5 = Qt_5_4,
71 Qt_5_6 = 17,
72 Qt_5_7 = Qt_5_6,
73 Qt_5_8 = Qt_5_7,
74 Qt_5_9 = Qt_5_8,
75 Qt_5_10 = Qt_5_9,
76 Qt_5_11 = Qt_5_10,
77 Qt_5_12 = 18,
78 Qt_5_13 = 19,
79 Qt_5_14 = Qt_5_13,
80 Qt_5_15 = Qt_5_14,
81 Qt_6_0 = 20,
82 Qt_6_1 = Qt_6_0,
83 Qt_6_2 = Qt_6_0,
84 Qt_6_3 = Qt_6_0,
85 Qt_6_4 = Qt_6_0,
86 Qt_6_5 = Qt_6_0,
87 Qt_6_6 = 21,
88 Qt_6_7 = 22,
89 Qt_6_8 = Qt_6_7,
90 Qt_DefaultCompiledVersion = Qt_6_8
91#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0)
92#error Add the datastream version for this Qt version and update Qt_DefaultCompiledVersion
93#endif
94 };
95
96 enum ByteOrder {
98 LittleEndian = QSysInfo::LittleEndian
99 };
100
101 enum Status QT7_ONLY(: quint8) {
102 Ok,
103 ReadPastEnd,
104 ReadCorruptData,
105 WriteFailed,
106 SizeLimitExceeded,
107 };
108
109 enum FloatingPointPrecision QT7_ONLY(: quint8) {
110 SinglePrecision,
111 DoublePrecision
112 };
113
114 QDataStream();
115 explicit QDataStream(QIODevice *);
116 QDataStream(QByteArray *, OpenMode flags);
117 QDataStream(const QByteArray &);
118 ~QDataStream();
119
120 QIODevice *device() const;
121 void setDevice(QIODevice *);
122
123 bool atEnd() const;
124
125 QT_CORE_INLINE_SINCE(6, 8)
126 Status status() const;
127 void setStatus(Status status);
128 void resetStatus();
129
130 QT_CORE_INLINE_SINCE(6, 8)
131 FloatingPointPrecision floatingPointPrecision() const;
132 void setFloatingPointPrecision(FloatingPointPrecision precision);
133
134 ByteOrder byteOrder() const;
135 void setByteOrder(ByteOrder);
136
137 int version() const;
138 void setVersion(int);
139
140 QDataStream &operator>>(char &i);
141 QDataStream &operator>>(qint8 &i);
142 QDataStream &operator>>(quint8 &i);
143 QDataStream &operator>>(qint16 &i);
144 QDataStream &operator>>(quint16 &i);
145 QDataStream &operator>>(qint32 &i);
146 inline QDataStream &operator>>(quint32 &i);
147 QDataStream &operator>>(qint64 &i);
148 QDataStream &operator>>(quint64 &i);
149 QDataStream &operator>>(std::nullptr_t &ptr) { ptr = nullptr; return *this; }
150
151 QDataStream &operator>>(bool &i);
152#if QT_CORE_REMOVED_SINCE(6, 3)
154#endif
155 QDataStream &operator>>(float &f);
156 QDataStream &operator>>(double &f);
157 QDataStream &operator>>(char *&str);
158 QDataStream &operator>>(char16_t &c);
159 QDataStream &operator>>(char32_t &c);
160
161 QDataStream &operator<<(char i);
170 QDataStream &operator<<(std::nullptr_t) { return *this; }
171#if QT_CORE_REMOVED_SINCE(6, 8) || defined(Q_QDOC)
172 QDataStream &operator<<(bool i);
173#endif
174#if !defined(Q_QDOC)
175 // Disable implicit conversions to bool (e.g. for pointers)
176 template <typename T,
177 std::enable_if_t<std::is_same_v<T, bool>, bool> = true>
179 {
180 return (*this << qint8(i));
181 }
182#endif
183#if QT_CORE_REMOVED_SINCE(6, 3)
185#endif
186 QDataStream &operator<<(float f);
187 QDataStream &operator<<(double f);
188 QDataStream &operator<<(const char *str);
189 QDataStream &operator<<(char16_t c);
190 QDataStream &operator<<(char32_t c);
191
192#if QT_DEPRECATED_SINCE(6, 11)
193 QT_DEPRECATED_VERSION_X_6_11("Use an overload that takes qint64 length.")
194 QDataStream &readBytes(char *&, uint &len);
195#endif
196#if QT_CORE_REMOVED_SINCE(6, 7)
197 QDataStream &writeBytes(const char *, uint len);
198 int skipRawData(int len);
199 int readRawData(char *, int len);
200 int writeRawData(const char *, int len);
201#endif
202 QDataStream &readBytes(char *&, qint64 &len);
203 qint64 readRawData(char *, qint64 len);
204 QDataStream &writeBytes(const char *, qint64 len);
205 qint64 writeRawData(const char *, qint64 len);
206 qint64 skipRawData(qint64 len);
207
208 void startTransaction();
209 bool commitTransaction();
210 void rollbackTransaction();
211 void abortTransaction();
212
213 bool isDeviceTransactionStarted() const;
214private:
215 Q_DISABLE_COPY(QDataStream)
216
217 QScopedPointer<QDataStreamPrivate> d;
218
219 QIODevice *dev = nullptr;
220 bool owndev = false;
222 quint8 fpPrecision = QDataStream::DoublePrecision;
223 quint8 q_status = Ok;
224#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED)
225 ByteOrder byteorder = BigEndian;
226 int ver = Qt_DefaultCompiledVersion;
227#else
228 Version ver = Qt_DefaultCompiledVersion;
229#endif
230 quint16 transactionDepth = 0;
231
232#if QT_CORE_REMOVED_SINCE(6, 7)
233 int readBlock(char *data, int len);
234#endif
235 qint64 readBlock(char *data, qint64 len);
236 static inline qint64 readQSizeType(QDataStream &s);
237 static inline bool writeQSizeType(QDataStream &s, qint64 value);
238 static constexpr quint32 NullCode = 0xffffffffu;
239 static constexpr quint32 ExtendedSize = 0xfffffffeu;
240
242 Q_CORE_EXPORT friend QDataStream &operator<<(QDataStream &out, const QString &str);
243 Q_CORE_EXPORT friend QDataStream &operator>>(QDataStream &in, QString &str);
244 Q_CORE_EXPORT friend QDataStream &operator<<(QDataStream &out, const QByteArray &ba);
246 template <typename Container>
248 template <typename Container>
250 template <typename Container>
252 template <typename Container>
254 template <typename Container>
256 template <typename Container>
258 const Container &c);
259};
260
261namespace QtPrivate {
262
264{
265 Q_DISABLE_COPY_MOVE(StreamStateSaver)
266public:
267 inline StreamStateSaver(QDataStream *s) : stream(s), oldStatus(s->status())
268 {
269 if (!stream->isDeviceTransactionStarted())
270 stream->resetStatus();
271 }
273 {
274 if (oldStatus != QDataStream::Ok) {
275 stream->resetStatus();
276 stream->setStatus(oldStatus);
277 }
278 }
279
280private:
282 QDataStream::Status oldStatus;
283};
284
285template <typename Container>
287{
288 StreamStateSaver stateSaver(&s);
289
290 c.clear();
291 qint64 size = QDataStream::readQSizeType(s);
292 qsizetype n = size;
293 if (size != n || size < 0) {
294 s.setStatus(QDataStream::SizeLimitExceeded);
295 return s;
296 }
297 c.reserve(n);
298 for (qsizetype i = 0; i < n; ++i) {
299 typename Container::value_type t;
300 s >> t;
301 if (s.status() != QDataStream::Ok) {
302 c.clear();
303 break;
304 }
305 c.append(t);
306 }
307
308 return s;
309}
310
311template <typename Container>
313{
314 StreamStateSaver stateSaver(&s);
315
316 c.clear();
317 qint64 size = QDataStream::readQSizeType(s);
318 qsizetype n = size;
319 if (size != n || size < 0) {
320 s.setStatus(QDataStream::SizeLimitExceeded);
321 return s;
322 }
323 for (qsizetype i = 0; i < n; ++i) {
324 typename Container::value_type t;
325 s >> t;
326 if (s.status() != QDataStream::Ok) {
327 c.clear();
328 break;
329 }
330 c << t;
331 }
332
333 return s;
334}
335
336template <typename Container>
338{
339 StreamStateSaver stateSaver(&s);
340
341 c.clear();
342 qint64 size = QDataStream::readQSizeType(s);
343 qsizetype n = size;
344 if (size != n || size < 0) {
345 s.setStatus(QDataStream::SizeLimitExceeded);
346 return s;
347 }
348 for (qsizetype i = 0; i < n; ++i) {
349 typename Container::key_type k;
350 typename Container::mapped_type t;
351 s >> k >> t;
352 if (s.status() != QDataStream::Ok) {
353 c.clear();
354 break;
355 }
356 c.insert(k, t);
357 }
358
359 return s;
360}
361
362template <typename Container>
364{
365 if (!QDataStream::writeQSizeType(s, c.size()))
366 return s;
367 for (const typename Container::value_type &t : c)
368 s << t;
369
370 return s;
371}
372
373template <typename Container>
375{
376 if (!QDataStream::writeQSizeType(s, c.size()))
377 return s;
378 auto it = c.constBegin();
379 auto end = c.constEnd();
380 while (it != end) {
381 s << it.key() << it.value();
382 ++it;
383 }
384
385 return s;
386}
387
388template <typename Container>
390{
391 if (!QDataStream::writeQSizeType(s, c.size()))
392 return s;
393 auto it = c.constBegin();
394 auto end = c.constEnd();
395 while (it != end) {
396 const auto rangeStart = it++;
397 while (it != end && rangeStart.key() == it.key())
398 ++it;
399 const qint64 last = std::distance(rangeStart, it) - 1;
400 for (qint64 i = last; i >= 0; --i) {
401 auto next = std::next(rangeStart, i);
402 s << next.key() << next.value();
403 }
404 }
405
406 return s;
407}
408
409} // QtPrivate namespace
410
411template<typename ...T>
413 std::enable_if_t<std::conjunction_v<QTypeTraits::has_ostream_operator<QDataStream, T>...>, QDataStream &>;
414template<typename Container, typename ...T>
416 std::enable_if_t<std::conjunction_v<QTypeTraits::has_ostream_operator_container<QDataStream, Container, T>...>, QDataStream &>;
417
418template<typename ...T>
420 std::enable_if_t<std::conjunction_v<QTypeTraits::has_istream_operator<QDataStream, T>...>, QDataStream &>;
421template<typename Container, typename ...T>
423 std::enable_if_t<std::conjunction_v<QTypeTraits::has_istream_operator_container<QDataStream, Container, T>...>, QDataStream &>;
424
425/*****************************************************************************
426 QDataStream inline functions
427 *****************************************************************************/
428
430{ return dev; }
431
432#if QT_CORE_INLINE_IMPL_SINCE(6, 8)
433QDataStream::Status QDataStream::status() const
434{
435 return Status(q_status);
436}
437
438QDataStream::FloatingPointPrecision QDataStream::floatingPointPrecision() const
439{
440 return FloatingPointPrecision(fpPrecision);
441}
442#endif // INLINE_SINCE 6.8
443
445{
447 return noswap ? BigEndian : LittleEndian;
448 return noswap ? LittleEndian : BigEndian;
449}
450
451inline int QDataStream::version() const
452{ return ver; }
453
455{ ver = Version(v); }
456
457qint64 QDataStream::readQSizeType(QDataStream &s)
458{
460 s >> first;
461 if (first == NullCode)
462 return -1;
463 if (first < ExtendedSize || s.version() < QDataStream::Qt_6_7)
464 return qint64(first);
465 qint64 extendedLen;
466 s >> extendedLen;
467 return extendedLen;
468}
469
470bool QDataStream::writeQSizeType(QDataStream &s, qint64 value)
471{
472 if (value < qint64(ExtendedSize)) {
473 s << quint32(value);
474 } else if (s.version() >= QDataStream::Qt_6_7) {
475 s << ExtendedSize << value;
476 } else if (value == qint64(ExtendedSize)) {
477 s << ExtendedSize;
478 } else {
479 s.setStatus(QDataStream::SizeLimitExceeded); // value is too big for old format
480 return false;
481 }
482 return true;
483}
484
486{ return *this >> reinterpret_cast<qint8&>(i); }
487
489{ return *this >> reinterpret_cast<qint8&>(i); }
490
492{ return *this >> reinterpret_cast<qint16&>(i); }
493
495{ return *this >> reinterpret_cast<qint32&>(i); }
496
498{ return *this >> reinterpret_cast<qint64&>(i); }
499
501{ return *this << qint8(i); }
502
504{ return *this << qint8(i); }
505
507{ return *this << qint16(i); }
508
510{ return *this << qint32(i); }
511
513{ return *this << qint64(i); }
514
515template <typename Enum>
516inline QDataStream &operator<<(QDataStream &s, QFlags<Enum> e)
517{ return s << typename QFlags<Enum>::Int(e); }
518
519template <typename Enum>
520inline QDataStream &operator>>(QDataStream &s, QFlags<Enum> &e)
521{
522 typename QFlags<Enum>::Int i;
523 s >> i;
524 e = QFlag(i);
525 return s;
526}
527
528template <typename T>
529typename std::enable_if_t<std::is_enum<T>::value, QDataStream &>
530operator<<(QDataStream &s, const T &t)
531{ return s << static_cast<typename std::underlying_type<T>::type>(t); }
532
533template <typename T>
534typename std::enable_if_t<std::is_enum<T>::value, QDataStream &>
536{ return s >> reinterpret_cast<typename std::underlying_type<T>::type &>(t); }
537
538#ifndef Q_QDOC
539
540template<typename T>
541inline QDataStreamIfHasIStreamOperatorsContainer<QList<T>, T> operator>>(QDataStream &s, QList<T> &v)
542{
544}
545
546template<typename T>
547inline QDataStreamIfHasOStreamOperatorsContainer<QList<T>, T> operator<<(QDataStream &s, const QList<T> &v)
548{
550}
551
552template <typename T>
553inline QDataStreamIfHasIStreamOperatorsContainer<QSet<T>, T> operator>>(QDataStream &s, QSet<T> &set)
554{
556}
557
558template <typename T>
559inline QDataStreamIfHasOStreamOperatorsContainer<QSet<T>, T> operator<<(QDataStream &s, const QSet<T> &set)
560{
562}
563
564template <class Key, class T>
565inline QDataStreamIfHasIStreamOperatorsContainer<QHash<Key, T>, Key, T> operator>>(QDataStream &s, QHash<Key, T> &hash)
566{
568}
569
570template <class Key, class T>
571
572inline QDataStreamIfHasOStreamOperatorsContainer<QHash<Key, T>, Key, T> operator<<(QDataStream &s, const QHash<Key, T> &hash)
573{
575}
576
577template <class Key, class T>
578inline QDataStreamIfHasIStreamOperatorsContainer<QMultiHash<Key, T>, Key, T> operator>>(QDataStream &s, QMultiHash<Key, T> &hash)
579{
581}
582
583template <class Key, class T>
584inline QDataStreamIfHasOStreamOperatorsContainer<QMultiHash<Key, T>, Key, T> operator<<(QDataStream &s, const QMultiHash<Key, T> &hash)
585{
587}
588
589template <class Key, class T>
590inline QDataStreamIfHasIStreamOperatorsContainer<QMap<Key, T>, Key, T> operator>>(QDataStream &s, QMap<Key, T> &map)
591{
593}
594
595template <class Key, class T>
596inline QDataStreamIfHasOStreamOperatorsContainer<QMap<Key, T>, Key, T> operator<<(QDataStream &s, const QMap<Key, T> &map)
597{
599}
600
601template <class Key, class T>
602inline QDataStreamIfHasIStreamOperatorsContainer<QMultiMap<Key, T>, Key, T> operator>>(QDataStream &s, QMultiMap<Key, T> &map)
603{
605}
606
607template <class Key, class T>
608inline QDataStreamIfHasOStreamOperatorsContainer<QMultiMap<Key, T>, Key, T> operator<<(QDataStream &s, const QMultiMap<Key, T> &map)
609{
611}
612
613template <class T1, class T2>
614inline QDataStreamIfHasIStreamOperators<T1, T2> operator>>(QDataStream& s, std::pair<T1, T2> &p)
615{
616 s >> p.first >> p.second;
617 return s;
618}
619
620template <class T1, class T2>
621inline QDataStreamIfHasOStreamOperators<T1, T2> operator<<(QDataStream& s, const std::pair<T1, T2> &p)
622{
623 s << p.first << p.second;
624 return s;
625}
626
627#else
628
629template <class T>
630QDataStream &operator>>(QDataStream &s, QList<T> &l);
631
632template <class T>
633QDataStream &operator<<(QDataStream &s, const QList<T> &l);
634
635template <class T>
637
638template <class T>
639QDataStream &operator<<(QDataStream &s, const QSet<T> &set);
640
641template <class Key, class T>
642QDataStream &operator>>(QDataStream &s, QHash<Key, T> &hash);
643
644template <class Key, class T>
645QDataStream &operator<<(QDataStream &s, const QHash<Key, T> &hash);
646
647template <class Key, class T>
648QDataStream &operator>>(QDataStream &s, QMultiHash<Key, T> &hash);
649
650template <class Key, class T>
651QDataStream &operator<<(QDataStream &s, const QMultiHash<Key, T> &hash);
652
653template <class Key, class T>
654QDataStream &operator>>(QDataStream &s, QMap<Key, T> &map);
655
656template <class Key, class T>
657QDataStream &operator<<(QDataStream &s, const QMap<Key, T> &map);
658
659template <class Key, class T>
660QDataStream &operator>>(QDataStream &s, QMultiMap<Key, T> &map);
661
662template <class Key, class T>
663QDataStream &operator<<(QDataStream &s, const QMultiMap<Key, T> &map);
664
665template <class T1, class T2>
666QDataStream &operator>>(QDataStream& s, std::pair<T1, T2> &p);
667
668template <class T1, class T2>
669QDataStream &operator<<(QDataStream& s, const std::pair<T1, T2> &p);
670
671#endif // Q_QDOC
672
674{
675 int combined;
676 s >> combined;
677 combination = QKeyCombination::fromCombined(combined);
678 return s;
679}
680
682{
683 return s << combination.toCombined();
684}
685
686#endif // QT_NO_DATASTREAM
687
689
690#endif // QDATASTREAM_H
IOBluetoothDevice * device
\inmodule QtCore
Definition qbytearray.h:57
\inmodule QtCore\reentrant
Definition qdatastream.h:46
enum Status QT7_ONLY(:quint8)
enum Version QT7_ONLY(:quint8)
Definition qdatastream.h:48
Status status() const
Returns the status of the data stream.
ByteOrder
The byte order used for reading/writing the data.
Definition qdatastream.h:96
QDataStream & operator<<(T i)
Q_CORE_EXPORT friend QDataStream & operator>>(QDataStream &in, QByteArray &ba)
Q_CORE_EXPORT friend QDataStream & operator>>(QDataStream &in, QString &str)
Definition qstring.cpp:9589
Q_CORE_EXPORT friend QDataStream & operator<<(QDataStream &out, const QByteArray &ba)
enum FloatingPointPrecision QT7_ONLY(:quint8)
QDataStream & operator<<(std::nullptr_t)
ByteOrder byteOrder() const
Returns the current byte order setting – either BigEndian or LittleEndian.
FloatingPointPrecision floatingPointPrecision() const
Returns the floating point precision of the data stream.
QIODevice * device() const
Returns the I/O device currently set, or \nullptr if no device is currently set.
Q_CORE_EXPORT friend QDataStream & operator<<(QDataStream &out, const QString &str)
Definition qstring.cpp:9558
int version() const
Returns the version number of the data serialization format.
void setVersion(int)
Sets the version number of the data serialization format to v, a value of the \l Version enum.
Definition qflags.h:17
std::conditional< std::is_unsigned< typenamestd::underlying_type< Enum >::type >::value, unsignedint, signedint >::type Int
Definition qflags.h:69
\inheaderfile QIODevice \inmodule QtCore
\inmodule QtCore \reentrant
Definition qiodevice.h:34
static constexpr QKeyCombination fromCombined(int combined)
constexpr int toCombined() const noexcept
const_iterator constBegin() const noexcept
Definition qset.h:139
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
@ BigEndian
Definition qsysinfo.h:29
@ ByteOrder
Definition qsysinfo.h:34
@ LittleEndian
Definition qsysinfo.h:30
StreamStateSaver(QDataStream *s)
\keyword 16-bit Floating Point Support\inmodule QtCore \inheaderfile QFloat16
Definition qfloat16.h:47
format setVersion(3, 2)
QHash< int, QWidget * > hash
[35multi]
QString str
[2]
QMap< QString, QString > map
[6]
QSet< QString >::iterator it
short next
Definition keywords.cpp:445
Combined button and popup list for selecting options.
\macro QT_NO_KEYWORDS >
QDataStream & readListBasedContainer(QDataStream &s, Container &c)
QDataStream & readAssociativeContainer(QDataStream &s, Container &c)
QDataStream & writeAssociativeContainer(QDataStream &s, const Container &c)
QDataStream & writeAssociativeMultiContainer(QDataStream &s, const Container &c)
QDataStream & writeSequentialContainer(QDataStream &s, const Container &c)
QDataStream & readArrayBasedContainer(QDataStream &s, Container &c)
@ Ok
Definition qbezier.cpp:173
std::enable_if_t< std::conjunction_v< QTypeTraits::has_ostream_operator_container< QDataStream, Container, T >... >, QDataStream & > QDataStreamIfHasOStreamOperatorsContainer
QDataStream & operator>>(QDataStream &s, QFlags< Enum > &e)
std::enable_if_t< std::conjunction_v< QTypeTraits::has_ostream_operator< QDataStream, T >... >, QDataStream & > QDataStreamIfHasOStreamOperators
std::enable_if_t< std::conjunction_v< QTypeTraits::has_istream_operator< QDataStream, T >... >, QDataStream & > QDataStreamIfHasIStreamOperators
std::enable_if_t< std::conjunction_v< QTypeTraits::has_istream_operator_container< QDataStream, Container, T >... >, QDataStream & > QDataStreamIfHasIStreamOperatorsContainer
QDataStream & operator<<(QDataStream &s, QFlags< Enum > e)
EGLStreamKHR stream
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
static ControlElement< T > * ptr(QWidget *widget)
GLsizei const GLfloat * v
[13]
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLuint GLuint end
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLfloat GLfloat f
GLbitfield flags
GLint first
GLfloat n
GLdouble s
[6]
Definition qopenglext.h:235
const GLubyte * c
GLdouble GLdouble t
Definition qopenglext.h:243
GLuint in
GLfloat GLfloat p
[1]
GLenum GLsizei len
GLenum GLint GLint * precision
#define QT_DEPRECATED_VERSION_X_6_11(text)
unsigned int quint32
Definition qtypes.h:50
short qint16
Definition qtypes.h:47
unsigned short quint16
Definition qtypes.h:48
int qint32
Definition qtypes.h:49
unsigned long long quint64
Definition qtypes.h:61
ptrdiff_t qsizetype
Definition qtypes.h:165
unsigned int uint
Definition qtypes.h:34
long long qint64
Definition qtypes.h:60
QT_BEGIN_NAMESPACE typedef signed char qint8
Definition qtypes.h:45
unsigned char quint8
Definition qtypes.h:46
QFuture< QSet< QChar > > set
[10]
QByteArray ba
[0]
QTextStream out(stdout)
[7]
QDataStream & operator<<(QDataStream &out, const MyClass &myObj)
[4]
QDataStream & operator>>(QDataStream &in, MyClass &myObj)