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
qoperatingsystemversion.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#include <QtCore/qglobal.h>
5#include <QtCore/qcompare.h>
6#include <QtCore/qversionnumber.h>
7
8#ifndef QOPERATINGSYSTEMVERSION_H
9#define QOPERATINGSYSTEMVERSION_H
10
12
13#if 0
14# pragma qt_class(QOperatingSystemVersionBase)
15# pragma qt_class(QOperatingSystemVersion)
16# pragma qt_sync_stop_processing // we have some ifdef'ery fooling syncqt
17#endif
18
19class QString;
20
22{
23public:
24 // ### Qt 7: Keep synchronized with the copy in QOperatingSystemVersion until Qt7,
25 // then remove this comment :)
36
38 int vmajor, int vminor = -1, int vmicro = -1)
39 : m_os(osType),
40 m_major(vmajor),
41 m_minor(vminor),
42 m_micro(vmicro)
43 { }
44
45 static Q_CORE_EXPORT QOperatingSystemVersionBase current();
46 static Q_CORE_EXPORT QString name(QOperatingSystemVersionBase osversion);
47 static Q_CORE_EXPORT bool isAnyOfType(std::initializer_list<OSType> types, OSType type);
48
49 static constexpr OSType currentType()
50 {
51#if defined(Q_OS_WIN)
52 return Windows;
53#elif defined(Q_OS_MACOS)
54 return MacOS;
55#elif defined(Q_OS_IOS)
56 return IOS;
57#elif defined(Q_OS_TVOS)
58 return TvOS;
59#elif defined(Q_OS_WATCHOS)
60 return WatchOS;
61#elif defined(Q_OS_VISIONOS)
62 return VisionOS;
63#elif defined(Q_OS_ANDROID)
64 return Android;
65#else
66 return Unknown;
67#endif
68 }
69
70 inline QVersionNumber version() const { return QVersionNumber(m_major, m_minor, m_micro); }
71
72 constexpr int majorVersion() const { return m_major; }
73 constexpr int minorVersion() const { return m_minor; }
74 constexpr int microVersion() const { return m_micro; }
75
76 constexpr int segmentCount() const
77 { return m_micro >= 0 ? 3 : m_minor >= 0 ? 2 : m_major >= 0 ? 1 : 0; }
78
79 inline bool isAnyOfType(std::initializer_list<OSType> types) const
80 {
82 }
83 constexpr OSType type() const { return m_os; }
84 inline QString name() const { return name(*this); }
85
86protected:
87 static Q_CORE_EXPORT int compare(QOperatingSystemVersionBase v1,
89
91 const QOperatingSystemVersionBase &rhs) noexcept
92 {
93 if (lhs.type() != rhs.type())
95 const int res = QOperatingSystemVersionBase::compare(lhs, rhs);
96 return Qt::compareThreeWay(res, 0);
97 }
98#ifdef __cpp_lib_three_way_comparison
99 friend std::partial_ordering
100 operator<=>(QOperatingSystemVersionBase lhs, QOperatingSystemVersionBase rhs) noexcept
101 { return compareThreeWay(lhs, rhs); }
102#else
103 friend bool
105 { return is_gt(compareThreeWay(lhs, rhs)); }
106
107 friend bool
109 { return is_gteq(compareThreeWay(lhs, rhs)); }
110
111 friend bool
113 { return is_lt(compareThreeWay(lhs, rhs)); }
114
115 friend bool
117 { return is_lteq(compareThreeWay(lhs, rhs)); }
118#endif
119
121private:
122 static QOperatingSystemVersionBase current_impl();
123
124 OSType m_os;
125 int m_major;
126 int m_minor;
127 int m_micro;
128};
129
130#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED) && !defined(Q_QDOC)
131class QOperatingSystemVersionUnexported : public QOperatingSystemVersionBase
132{
133public:
135 constexpr QOperatingSystemVersionUnexported(QOperatingSystemVersionBase other) noexcept
137#else
139{
141#endif
142
143 // ### Qt7: Regroup with the rest below
144 static constexpr QOperatingSystemVersionBase MacOSSonoma { QOperatingSystemVersionBase::MacOS, 14, 0 };
145 static constexpr QOperatingSystemVersionBase Android14 { QOperatingSystemVersionBase::Android, 14, 0 };
146 static constexpr QOperatingSystemVersionBase Windows11_23H2 { QOperatingSystemVersionBase::Windows, 10, 0, 22631 };
147
148#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED) && !defined(Q_QDOC)
149};
150
151class Q_CORE_EXPORT QOperatingSystemVersion : public QOperatingSystemVersionUnexported
152{
153#endif
154public:
155 // ### Qt7: Remove. Keep synchronized with QOperatingSystemVersionBase::OSType until then!
156#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED)
157 enum OSType {
158 Unknown = 0,
159 Windows,
160 MacOS,
161 IOS,
162 TvOS,
163 WatchOS,
164 Android,
165 VisionOS
166 };
167#endif
168
169 // ### Qt7: remove the branch with static const variables. Then group and
170 // sort the inline ones. Until then, new entries should be added to
171 // QOperatingSystemVersionUnexported.
172#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED)
173 static const QOperatingSystemVersion Windows7;
174 static const QOperatingSystemVersion Windows8;
175 static const QOperatingSystemVersion Windows8_1;
176 static const QOperatingSystemVersion Windows10;
177
178 static const QOperatingSystemVersion OSXMavericks;
179 static const QOperatingSystemVersion OSXYosemite;
180 static const QOperatingSystemVersion OSXElCapitan;
181 static const QOperatingSystemVersion MacOSSierra;
182 static const QOperatingSystemVersion MacOSHighSierra;
183 static const QOperatingSystemVersion MacOSMojave;
184 static const QOperatingSystemVersion MacOSCatalina;
185 static const QOperatingSystemVersion MacOSBigSur;
186 static const QOperatingSystemVersion MacOSMonterey;
187
188 static const QOperatingSystemVersion AndroidJellyBean;
189 static const QOperatingSystemVersion AndroidJellyBean_MR1;
190 static const QOperatingSystemVersion AndroidJellyBean_MR2;
191 static const QOperatingSystemVersion AndroidKitKat;
192 static const QOperatingSystemVersion AndroidLollipop;
193 static const QOperatingSystemVersion AndroidLollipop_MR1;
194 static const QOperatingSystemVersion AndroidMarshmallow;
195 static const QOperatingSystemVersion AndroidNougat;
196 static const QOperatingSystemVersion AndroidNougat_MR1;
197 static const QOperatingSystemVersion AndroidOreo;
198 static const QOperatingSystemVersion AndroidOreo_MR1;
199 static const QOperatingSystemVersion AndroidPie;
200 static const QOperatingSystemVersion Android10;
201 static const QOperatingSystemVersion Android11;
202#else
207
208 static constexpr QOperatingSystemVersionBase OSXMavericks { QOperatingSystemVersionBase::MacOS, 10, 9 };
209 static constexpr QOperatingSystemVersionBase OSXYosemite { QOperatingSystemVersionBase::MacOS, 10, 10 };
210 static constexpr QOperatingSystemVersionBase OSXElCapitan { QOperatingSystemVersionBase::MacOS, 10, 11 };
211 static constexpr QOperatingSystemVersionBase MacOSSierra { QOperatingSystemVersionBase::MacOS, 10, 12 };
212 static constexpr QOperatingSystemVersionBase MacOSHighSierra { QOperatingSystemVersionBase::MacOS, 10, 13 };
213 static constexpr QOperatingSystemVersionBase MacOSMojave { QOperatingSystemVersionBase::MacOS, 10, 14 };
214 static constexpr QOperatingSystemVersionBase MacOSCatalina { QOperatingSystemVersionBase::MacOS, 10, 15 };
215 static constexpr QOperatingSystemVersionBase MacOSBigSur = { QOperatingSystemVersionBase::MacOS, 11, 0 };
216 static constexpr QOperatingSystemVersionBase MacOSMonterey = { QOperatingSystemVersionBase::MacOS, 12, 0 };
217
218 static constexpr QOperatingSystemVersionBase AndroidJellyBean { QOperatingSystemVersionBase::Android, 4, 1 };
219 static constexpr QOperatingSystemVersionBase AndroidJellyBean_MR1 { QOperatingSystemVersionBase::Android, 4, 2 };
220 static constexpr QOperatingSystemVersionBase AndroidJellyBean_MR2 { QOperatingSystemVersionBase::Android, 4, 3 };
222 static constexpr QOperatingSystemVersionBase AndroidLollipop { QOperatingSystemVersionBase::Android, 5, 0 };
223 static constexpr QOperatingSystemVersionBase AndroidLollipop_MR1 { QOperatingSystemVersionBase::Android, 5, 1 };
224 static constexpr QOperatingSystemVersionBase AndroidMarshmallow { QOperatingSystemVersionBase::Android, 6, 0 };
226 static constexpr QOperatingSystemVersionBase AndroidNougat_MR1 { QOperatingSystemVersionBase::Android, 7, 1 };
228 static constexpr QOperatingSystemVersionBase AndroidOreo_MR1 { QOperatingSystemVersionBase::Android, 8, 1 };
232#endif
233
234 static constexpr QOperatingSystemVersionBase Windows10_1809 { QOperatingSystemVersionBase::Windows, 10, 0, 17763 }; // RS5
235 static constexpr QOperatingSystemVersionBase Windows10_1903 { QOperatingSystemVersionBase::Windows, 10, 0, 18362 }; // 19H1
236 static constexpr QOperatingSystemVersionBase Windows10_1909 { QOperatingSystemVersionBase::Windows, 10, 0, 18363 }; // 19H2
237 static constexpr QOperatingSystemVersionBase Windows10_2004 { QOperatingSystemVersionBase::Windows, 10, 0, 19041 }; // 20H1
238 static constexpr QOperatingSystemVersionBase Windows10_20H2 { QOperatingSystemVersionBase::Windows, 10, 0, 19042 };
239 static constexpr QOperatingSystemVersionBase Windows10_21H1 { QOperatingSystemVersionBase::Windows, 10, 0, 19043 };
240 static constexpr QOperatingSystemVersionBase Windows10_21H2 { QOperatingSystemVersionBase::Windows, 10, 0, 19044 };
241 static constexpr QOperatingSystemVersionBase Windows10_22H2 { QOperatingSystemVersionBase::Windows, 10, 0, 19045 };
242 static constexpr QOperatingSystemVersionBase Windows11 { QOperatingSystemVersionBase::Windows, 10, 0, 22000 };
243 static constexpr QOperatingSystemVersionBase Windows11_21H2 = Windows11;
244 static constexpr QOperatingSystemVersionBase Windows11_22H2 { QOperatingSystemVersionBase::Windows, 10, 0, 22621 };
245
249
250 static constexpr QOperatingSystemVersionBase MacOSVentura { QOperatingSystemVersionBase::MacOS, 13, 0 };
251
254
255 constexpr QOperatingSystemVersion(OSType osType, int vmajor, int vminor = -1, int vmicro = -1)
257 vmicro)
258 {
259 }
260
261#if QT_CORE_REMOVED_SINCE(6, 3) || defined(Q_QDOC)
262 static QOperatingSystemVersion current();
263#endif
264
265 static constexpr OSType currentType()
266 {
268 }
269
270#if QT_CORE_REMOVED_SINCE(6, 3) || defined(Q_QDOC)
271 QVersionNumber version() const { return QOperatingSystemVersionBase::version(); }
272
273 constexpr int majorVersion() const { return QOperatingSystemVersionBase::majorVersion(); }
274 constexpr int minorVersion() const { return QOperatingSystemVersionBase::minorVersion(); }
275 constexpr int microVersion() const { return QOperatingSystemVersionBase::microVersion(); }
276
277 constexpr int segmentCount() const
279#endif // QT_CORE_REMOVED_SINCE(6, 3)
280
281 constexpr OSType type() const { return OSType(QOperatingSystemVersionBase::type()); }
282 QT7_ONLY(Q_CORE_EXPORT) bool isAnyOfType(std::initializer_list<OSType> types) const;
283#if QT_CORE_REMOVED_SINCE(6, 3) || defined(Q_QDOC)
284 QString name() const;
285#endif
286
287private:
288 QOperatingSystemVersion() = default;
289
290#if QT_CORE_REMOVED_SINCE(6, 3)
291 // ### Qt 7: Remove. It's only here for backwards compat with previous inline calls.
292 [[maybe_unused]] static int compare(const QOperatingSystemVersion &v1,
294#endif
295};
297
298#ifndef QT_NO_DEBUG_STREAM
299class QDebug;
300Q_CORE_EXPORT QDebug operator<<(QDebug debug, const QOperatingSystemVersion &ov);
301#endif
302
304
305#endif // QOPERATINGSYSTEMVERSION_H
\inmodule QtCore
friend bool operator<=(QOperatingSystemVersionBase lhs, QOperatingSystemVersionBase rhs) noexcept
friend bool operator<(QOperatingSystemVersionBase lhs, QOperatingSystemVersionBase rhs) noexcept
friend bool operator>=(QOperatingSystemVersionBase lhs, QOperatingSystemVersionBase rhs) noexcept
constexpr QOperatingSystemVersionBase(OSType osType, int vmajor, int vminor=-1, int vmicro=-1)
static Q_CORE_EXPORT QOperatingSystemVersionBase current()
bool isAnyOfType(std::initializer_list< OSType > types) const
static Q_CORE_EXPORT bool isAnyOfType(std::initializer_list< OSType > types, OSType type)
friend bool operator>(QOperatingSystemVersionBase lhs, QOperatingSystemVersionBase rhs) noexcept
friend Qt::partial_ordering compareThreeWay(const QOperatingSystemVersionBase &lhs, const QOperatingSystemVersionBase &rhs) noexcept
static constexpr OSType currentType()
static Q_CORE_EXPORT int compare(QOperatingSystemVersionBase v1, QOperatingSystemVersionBase v2) noexcept
static constexpr OSType currentType()
Returns the current OS type without constructing a QOperatingSystemVersion instance.
constexpr QOperatingSystemVersion(const QOperatingSystemVersionBase &osversion)
constexpr QOperatingSystemVersion(OSType osType, int vmajor, int vminor=-1, int vmicro=-1)
Constructs a QOperatingSystemVersion consisting of the OS type osType, and major, minor,...
constexpr OSType type() const
Returns the OS type identified by the QOperatingSystemVersion.
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
\inmodule QtCore
\variable Qt::weak_ordering::less
Definition qcompare.h:66
static const partial_ordering unordered
Definition qcompare.h:71
Combined button and popup list for selecting options.
constexpr Qt::strong_ordering compareThreeWay(LeftInt lhs, RightInt rhs) noexcept
GLint GLfloat GLfloat GLfloat v2
GLsizei GLenum GLenum * types
GLenum type
GLint GLfloat GLfloat v1
GLuint name
GLuint res
Q_CORE_EXPORT QDebug operator<<(QDebug debug, const QOperatingSystemVersion &ov)
\variable QOperatingSystemVersion::Android14
static int segmentCount(const QPainterPath &path, qreal pathLength)
static int compare(quint64 a, quint64 b)
@ Q_PRIMITIVE_TYPE
Definition qtypeinfo.h:157
#define Q_DECLARE_TYPEINFO(TYPE, FLAGS)
Definition qtypeinfo.h:180
QSharedPointer< T > other(t)
[5]