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.cpp
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
5
6#if !defined(Q_OS_DARWIN) && !defined(Q_OS_WIN)
8#endif
9
10#if defined(Q_OS_DARWIN)
11#include <QtCore/private/qcore_mac_p.h>
12#endif
13
14#include <qversionnumber.h>
15#include <qdebug.h>
16
17#ifdef Q_OS_ANDROID
18#include <QtCore/private/qjnihelpers_p.h>
19#include <QJniObject>
20#endif
21
23
121{
122 static const QOperatingSystemVersionBase v = current_impl();
123 return v;
124}
125
126#if !defined(Q_OS_DARWIN) && !defined(Q_OS_WIN)
127QOperatingSystemVersionBase QOperatingSystemVersionBase::current_impl()
128{
130 version.m_os = currentType();
131#ifdef Q_OS_ANDROID
132#ifndef QT_BOOTSTRAPPED
133 const QVersionNumber v = QVersionNumber::fromString(QJniObject::getStaticObjectField(
134 "android/os/Build$VERSION", "RELEASE", "Ljava/lang/String;").toString());
135 if (!v.isNull()) {
136 version.m_major = v.majorVersion();
137 version.m_minor = v.minorVersion();
138 version.m_micro = v.microVersion();
139 return version;
140 }
141#endif
142
143 version.m_major = -1;
144 version.m_minor = -1;
145
146 static const struct {
147 uint major : 4;
148 uint minor : 4;
149 } versions[] = {
150 { 1, 0 }, // API level 1
151 { 1, 1 }, // API level 2
152 { 1, 5 }, // API level 3
153 { 1, 6 }, // API level 4
154 { 2, 0 }, // API level 5
155 { 2, 0 }, // API level 6
156 { 2, 1 }, // API level 7
157 { 2, 2 }, // API level 8
158 { 2, 3 }, // API level 9
159 { 2, 3 }, // API level 10
160 { 3, 0 }, // API level 11
161 { 3, 1 }, // API level 12
162 { 3, 2 }, // API level 13
163 { 4, 0 }, // API level 14
164 { 4, 0 }, // API level 15
165 { 4, 1 }, // API level 16
166 { 4, 2 }, // API level 17
167 { 4, 3 }, // API level 18
168 { 4, 4 }, // API level 19
169 { 4, 4 }, // API level 20
170 { 5, 0 }, // API level 21
171 { 5, 1 }, // API level 22
172 { 6, 0 }, // API level 23
173 { 7, 0 }, // API level 24
174 { 7, 1 }, // API level 25
175 { 8, 0 }, // API level 26
176 { 8, 1 }, // API level 27
177 { 9, 0 }, // API level 28
178 { 10, 0 }, // API level 29
179 { 11, 0 }, // API level 30
180 { 12, 0 }, // API level 31
181 { 12, 0 }, // API level 32
182 { 13, 0 }, // API level 33
183 };
184
185 // This will give us at least the first 2 version components
186 const size_t versionIdx = QtAndroidPrivate::androidSdkVersion() - 1;
187 if (versionIdx < sizeof(versions) / sizeof(versions[0])) {
188 version.m_major = versions[versionIdx].major;
189 version.m_minor = versions[versionIdx].minor;
190 }
191
192 // API level 6 was exactly version 2.0.1
193 version.m_micro = versionIdx == 5 ? 1 : -1;
194#else
195 version.m_major = -1;
196 version.m_minor = -1;
197 version.m_micro = -1;
198#endif
199 return version;
200}
201#endif
202
203static inline int compareVersionComponents(int lhs, int rhs) noexcept
204{
205 return lhs >= 0 && rhs >= 0 ? lhs - rhs : 0;
206}
207
210{
211 if (v1.m_major == v2.m_major) {
212 if (v1.m_minor == v2.m_minor) {
213 return compareVersionComponents(v1.m_micro, v2.m_micro);
214 }
215 return compareVersionComponents(v1.m_minor, v2.m_minor);
216 }
217 return compareVersionComponents(v1.m_major, v2.m_major);
218}
219
307{
308 switch (osversion.type()) {
310 return QStringLiteral("Windows");
312 if (osversion.majorVersion() < 10)
313 return QStringLiteral("Mac OS");
314 if (osversion.majorVersion() == 10 && osversion.minorVersion() < 8)
315 return QStringLiteral("Mac OS X");
316 if (osversion.majorVersion() == 10 && osversion.minorVersion() < 12)
317 return QStringLiteral("OS X");
318 return QStringLiteral("macOS");
319 }
321 if (osversion.majorVersion() < 4)
322 return QStringLiteral("iPhone OS");
323 return QStringLiteral("iOS");
324 }
326 return QStringLiteral("tvOS");
328 return QStringLiteral("watchOS");
330 return QStringLiteral("visionOS");
332 return QStringLiteral("Android");
334 default:
335 return QString();
336 }
337}
338
345bool QOperatingSystemVersion::isAnyOfType(std::initializer_list<OSType> types) const
346{
347 // ### Qt7: Remove this function
348 return std::find(types.begin(), types.end(), type()) != types.end();
349}
350
351bool QOperatingSystemVersionBase::isAnyOfType(std::initializer_list<OSType> types, OSType type)
352{
353 return std::find(types.begin(), types.end(), type) != types.end();
354}
355
356#ifndef QT_BOOTSTRAPPED
357
365
373
381
389
397
405
413
421
429
437
445
453
461
468
475
489
497
505
513
521
529
537
545
553
560
574
583
592
600
608
617
625
633
642
650
658
666
674
682
689
696
703
710#endif // !QT_BOOTSTRAPPED
711
712#ifndef QT_NO_DEBUG_STREAM
714{
715 QDebugStateSaver saver(debug);
716 debug.nospace();
717 debug << "QOperatingSystemVersion(" << ov.name()
718 << ", " << ov.majorVersion() << '.' << ov.minorVersion()
719 << '.' << ov.microVersion() << ')';
720 return debug;
721}
722#endif // !QT_NO_DEBUG_STREAM
723
\inmodule QtCore
\inmodule QtCore
static Q_CORE_EXPORT QOperatingSystemVersionBase current()
static Q_CORE_EXPORT bool isAnyOfType(std::initializer_list< OSType > types, OSType type)
static constexpr OSType currentType()
static Q_CORE_EXPORT int compare(QOperatingSystemVersionBase v1, QOperatingSystemVersionBase v2) noexcept
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 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 Windows10_2004
\variable QOperatingSystemVersion::Windows10_2004
static constexpr QOperatingSystemVersionBase MacOSHighSierra
\variable QOperatingSystemVersion::MacOSHighSierra
static constexpr QOperatingSystemVersionBase Windows10_21H2
\variable QOperatingSystemVersion::Windows10_21H2
static constexpr QOperatingSystemVersionBase AndroidMarshmallow
\variable QOperatingSystemVersion::AndroidMarshmallow
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
static constexpr QOperatingSystemVersionBase AndroidLollipop
\variable QOperatingSystemVersion::AndroidLollipop
static constexpr QOperatingSystemVersionBase Windows8_1
\variable QOperatingSystemVersion::Windows8_1
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 Windows11
\variable QOperatingSystemVersion::Windows11
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
\inmodule QtCore
int minorVersion() const noexcept
Returns the minor version number, that is, the second segment.
int majorVersion() const noexcept
Returns the major version number, that is, the first segment.
static Q_CORE_EXPORT QVersionNumber fromString(QAnyStringView string, qsizetype *suffixIndex=nullptr)
int microVersion() const noexcept
Returns the micro version number, that is, the third segment.
Combined button and popup list for selecting options.
Q_CORE_EXPORT jint androidSdkVersion()
GLint GLfloat GLfloat GLfloat v2
GLsizei const GLfloat * v
[13]
GLsizei GLenum GLenum * types
GLenum type
GLint GLfloat GLfloat v1
QDebug operator<<(QDebug debug, const QOperatingSystemVersion &ov)
\variable QOperatingSystemVersion::Android14
static int compareVersionComponents(int lhs, int rhs) noexcept
#define QStringLiteral(str)
unsigned int uint
Definition qtypes.h:34
char * toString(const MyType &t)
[31]