Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
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// Qt-Security score:significant reason:default
4
5#include <QtCore/qglobal.h>
6#include <QtCore/qcompare.h>
7#include <QtCore/qversionnumber.h>
8
9#ifndef QOPERATINGSYSTEMVERSION_H
10#define QOPERATINGSYSTEMVERSION_H
11
12QT_BEGIN_NAMESPACE
13
14#if 0
15# pragma qt_class(QOperatingSystemVersionBase)
16# pragma qt_class(QOperatingSystemVersion)
17# pragma qt_sync_stop_processing // we have some ifdef'ery fooling syncqt
18#endif
19
20class QString;
21
23{
24public:
25 // ### Qt 7: Keep synchronized with the copy in QOperatingSystemVersion until Qt7,
26 // then remove this comment :)
38
40 int vmajor, int vminor = -1, int vmicro = -1)
41 : m_os(osType),
42 m_major(vmajor),
43 m_minor(vminor),
44 m_micro(vmicro)
45 { }
46
47 static Q_CORE_EXPORT QOperatingSystemVersionBase current();
48 static Q_CORE_EXPORT QString name(QOperatingSystemVersionBase osversion);
49 static Q_CORE_EXPORT bool isAnyOfType(std::initializer_list<OSType> types, OSType type);
50
51 static constexpr OSType currentType()
52 {
53#if defined(Q_OS_WIN)
54 return Windows;
55#elif defined(Q_OS_MACOS)
56 return MacOS;
57#elif defined(Q_OS_IOS)
58 return IOS;
59#elif defined(Q_OS_TVOS)
60 return TvOS;
61#elif defined(Q_OS_WATCHOS)
62 return WatchOS;
63#elif defined(Q_OS_VISIONOS)
64 return VisionOS;
65#elif defined(Q_OS_ANDROID)
66 return Android;
67#elif defined(Q_OS_OHOS)
68 return OHOS;
69#else
70 return Unknown;
71#endif
72 }
73
74 inline QVersionNumber version() const { return QVersionNumber(m_major, m_minor, m_micro); }
75
76 constexpr int majorVersion() const { return m_major; }
77 constexpr int minorVersion() const { return m_minor; }
78 constexpr int microVersion() const { return m_micro; }
79
80 constexpr int segmentCount() const
81 { return m_micro >= 0 ? 3 : m_minor >= 0 ? 2 : m_major >= 0 ? 1 : 0; }
82
83 inline bool isAnyOfType(std::initializer_list<OSType> types) const
84 {
85 return QOperatingSystemVersionBase::isAnyOfType(types, type());
86 }
87 constexpr OSType type() const { return m_os; }
88 inline QString name() const { return name(*this); }
89
90protected:
92 QOperatingSystemVersionBase v2) noexcept;
93
95 const QOperatingSystemVersionBase &rhs) noexcept
96 {
97 if (lhs.type() != rhs.type())
98 return Qt::partial_ordering::unordered;
99 const int res = QOperatingSystemVersionBase::compare(lhs, rhs);
100 return Qt::compareThreeWay(res, 0);
101 }
102#ifdef __cpp_lib_three_way_comparison
103 friend std::partial_ordering
105 { return compareThreeWay(lhs, rhs); }
106#else
107 friend bool
110
111 friend bool
113 { return is_gteq(compareThreeWay(lhs, rhs)); }
114
115 friend bool
117 { return is_lt(compareThreeWay(lhs, rhs)); }
118
119 friend bool
121 { return is_lteq(compareThreeWay(lhs, rhs)); }
122#endif
123
125private:
126 static QOperatingSystemVersionBase current_impl();
127
128 OSType m_os;
129 int m_major;
130 int m_minor;
131 int m_micro;
132};
133
134#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED) && !defined(Q_QDOC)
135class QOperatingSystemVersionUnexported : public QOperatingSystemVersionBase
136{
137public:
138 using QOperatingSystemVersionBase::QOperatingSystemVersionBase;
139 constexpr QOperatingSystemVersionUnexported(QOperatingSystemVersionBase other) noexcept
140 : QOperatingSystemVersionBase(other) {}
141#else
143{
144 using QOperatingSystemVersionUnexported = QOperatingSystemVersionBase;
145public:
146#endif
147
148 // ### Qt7: Regroup with the rest below
156
157#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED) && !defined(Q_QDOC)
158};
159
161{
162#endif
163public:
164 // ### Qt7: Remove. Keep synchronized with QOperatingSystemVersionBase::OSType until then!
165#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED)
166 enum OSType {
167 Unknown = 0,
168 Windows,
169 MacOS,
170 IOS,
171 TvOS,
172 WatchOS,
173 Android,
174 VisionOS,
175 };
176#endif
177
178 // ### Qt7: remove the branch with static const variables. Then group and
179 // sort the inline ones. Until then, new entries should be added to
180 // QOperatingSystemVersionUnexported.
181#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED)
186
196
211#else
216
226
241#endif
242
254
258
260
262 : QOperatingSystemVersionUnexported(osversion) {}
263
264 constexpr QOperatingSystemVersion(OSType osType, int vmajor, int vminor = -1, int vmicro = -1)
265 : QOperatingSystemVersionUnexported(QOperatingSystemVersionBase::OSType(osType), vmajor, vminor,
266 vmicro)
267 {
268 }
269
270 QT_CORE_INLINE_SINCE(6, 3)
272
273 static constexpr OSType currentType()
274 {
276 }
277
278#if QT_CORE_REMOVED_SINCE(6, 3) || defined(Q_QDOC)
280
281 constexpr int majorVersion() const { return QOperatingSystemVersionBase::majorVersion(); }
282 constexpr int minorVersion() const { return QOperatingSystemVersionBase::minorVersion(); }
283 constexpr int microVersion() const { return QOperatingSystemVersionBase::microVersion(); }
284
285 constexpr int segmentCount() const
287#endif // QT_CORE_REMOVED_SINCE(6, 3)
288
289 constexpr OSType type() const { return OSType(QOperatingSystemVersionBase::type()); }
290 QT7_ONLY(Q_CORE_EXPORT) bool isAnyOfType(std::initializer_list<OSType> types) const;
291#if QT_CORE_REMOVED_SINCE(6, 3) || defined(Q_QDOC)
292 QString name() const;
293#endif
294
295private:
296 QOperatingSystemVersion() = default;
297
298#if QT_CORE_REMOVED_SINCE(6, 3)
299 // ### Qt 7: Remove. It's only here for backwards compat with previous inline calls.
300 [[maybe_unused]] static int compare(const QOperatingSystemVersion &v1,
302#endif
303};
305
306#ifndef QT_NO_DEBUG_STREAM
307class QDebug;
308Q_CORE_EXPORT QDebug operator<<(QDebug debug, const QOperatingSystemVersion &ov);
309#endif
310
311#if QT_CORE_INLINE_IMPL_SINCE(6, 3)
312QOperatingSystemVersion QOperatingSystemVersion::current()
313{
314 return QOperatingSystemVersionBase::current();
315}
316#endif // QT_CORE_INLINE_IMPL_SINCE(6, 3)
317
318QT_END_NAMESPACE
319
320#endif // QOPERATINGSYSTEMVERSION_H
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)
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 QOperatingSystemVersionBase MacOSSequoia
static constexpr QOperatingSystemVersionBase MacOSTahoe
static constexpr QOperatingSystemVersionBase Windows11_21H2
\variable QOperatingSystemVersion::Windows11_21H2
static constexpr QOperatingSystemVersionBase AndroidNougat
\variable QOperatingSystemVersion::AndroidNougat
static constexpr QOperatingSystemVersionBase Android10
\variable QOperatingSystemVersion::Android10
static constexpr QOperatingSystemVersionBase MacOSSierra
\variable QOperatingSystemVersion::MacOSSierra
static constexpr QOperatingSystemVersionBase OSXYosemite
\variable QOperatingSystemVersion::OSXYosemite
static constexpr QOperatingSystemVersionBase Android12L
\variable QOperatingSystemVersion::Android12L
static constexpr QOperatingSystemVersionBase Windows10_1909
\variable QOperatingSystemVersion::Windows10_1909
static constexpr QOperatingSystemVersionBase AndroidKitKat
\variable QOperatingSystemVersion::AndroidKitKat
static constexpr QOperatingSystemVersionBase AndroidJellyBean
\variable QOperatingSystemVersion::MacOSSonoma
static constexpr QOperatingSystemVersionBase AndroidOreo_MR1
\variable QOperatingSystemVersion::AndroidOreo_MR1
static constexpr QOperatingSystemVersionBase Android13
\variable QOperatingSystemVersion::Android13
static constexpr QOperatingSystemVersionBase MacOSCatalina
\variable QOperatingSystemVersion::MacOSCatalina
static constexpr QOperatingSystemVersionBase AndroidLollipop_MR1
\variable QOperatingSystemVersion::AndroidLollipop_MR1
static constexpr QOperatingSystemVersionBase Windows10
\variable QOperatingSystemVersion::Windows10
static constexpr QOperatingSystemVersionBase Windows10_1903
\variable QOperatingSystemVersion::Windows10_1903
static constexpr QOperatingSystemVersionBase Android12
\variable QOperatingSystemVersion::Android12
static constexpr OSType currentType()
Returns the current OS type without constructing a QOperatingSystemVersion instance.
static constexpr QOperatingSystemVersionBase Windows11_23H2
static constexpr QOperatingSystemVersionBase OSXElCapitan
\variable QOperatingSystemVersion::OSXElCapitan
static constexpr QOperatingSystemVersionBase MacOSMojave
\variable QOperatingSystemVersion::MacOSMojave
static constexpr QOperatingSystemVersionBase Windows8
\variable QOperatingSystemVersion::Windows8
static constexpr QOperatingSystemVersionBase AndroidNougat_MR1
\variable QOperatingSystemVersion::AndroidNougat_MR1
static constexpr QOperatingSystemVersionBase Android14
static constexpr QOperatingSystemVersionBase Windows10_2004
\variable QOperatingSystemVersion::Windows10_2004
static constexpr QOperatingSystemVersionBase MacOSHighSierra
\variable QOperatingSystemVersion::MacOSHighSierra
static constexpr QOperatingSystemVersionBase Windows10_21H2
\variable QOperatingSystemVersion::Windows10_21H2
constexpr QOperatingSystemVersion(const QOperatingSystemVersionBase &osversion)
static constexpr QOperatingSystemVersionBase AndroidMarshmallow
\variable QOperatingSystemVersion::AndroidMarshmallow
constexpr QOperatingSystemVersion(OSType osType, int vmajor, int vminor=-1, int vmicro=-1)
Constructs a QOperatingSystemVersion consisting of the OS type osType, and major, minor,...
static constexpr QOperatingSystemVersionBase AndroidJellyBean_MR2
\variable QOperatingSystemVersion::AndroidJellyBean_MR2
static constexpr QOperatingSystemVersionBase Windows10_20H2
\variable QOperatingSystemVersion::Windows10_20H2
static constexpr QOperatingSystemVersionBase AndroidPie
\variable QOperatingSystemVersion::AndroidPie
static constexpr QOperatingSystemVersionBase AndroidOreo
\variable QOperatingSystemVersion::AndroidOreo
static constexpr QOperatingSystemVersionBase OSXMavericks
\variable QOperatingSystemVersion::Windows11_23H2
static constexpr QOperatingSystemVersionBase MacOSMonterey
\variable QOperatingSystemVersion::MacOSMonterey
static constexpr QOperatingSystemVersionBase Windows7
\variable QOperatingSystemVersion::Windows7
static constexpr QOperatingSystemVersionBase MacOSVentura
\variable QOperatingSystemVersion::MacOSVentura
static constexpr QOperatingSystemVersionBase Windows10_1809
\variable QOperatingSystemVersion::Windows10_1809
static constexpr QOperatingSystemVersionBase AndroidJellyBean_MR1
\variable QOperatingSystemVersion::AndroidJellyBean_MR1
static constexpr QOperatingSystemVersionBase MacOSBigSur
\variable QOperatingSystemVersion::MacOSBigSur
constexpr OSType type() const
Returns the OS type identified by the QOperatingSystemVersion.
static constexpr QOperatingSystemVersionBase AndroidLollipop
\variable QOperatingSystemVersion::AndroidLollipop
static constexpr QOperatingSystemVersionBase Windows8_1
\variable QOperatingSystemVersion::Windows8_1
static constexpr QOperatingSystemVersionBase Windows11_24H2
static constexpr QOperatingSystemVersionBase Windows11_25H2
static constexpr QOperatingSystemVersionBase Windows10_21H1
\variable QOperatingSystemVersion::Windows10_21H1
static constexpr QOperatingSystemVersionBase Windows11_22H2
\variable QOperatingSystemVersion::Windows11_22H2
static constexpr QOperatingSystemVersionBase Windows10_22H2
\variable QOperatingSystemVersion::Windows10_22H2
static constexpr QOperatingSystemVersionBase Android11
\variable QOperatingSystemVersion::Android11
static constexpr QOperatingSystemVersionBase MacOSSonoma
static constexpr QOperatingSystemVersionBase Windows11
\variable QOperatingSystemVersion::Windows11
Combined button and popup list for selecting options.
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
Definition qdir.cpp:2582
static int compareVersionComponents(int lhs, int rhs) noexcept
Q_DECLARE_TYPEINFO(QOperatingSystemVersion, Q_PRIMITIVE_TYPE)