File indexing completed on 2025-09-17 09:09:27
0001
0002
0003
0004 #include <QtCore/qglobal.h>
0005 #include <QtCore/qcompare.h>
0006 #include <QtCore/qversionnumber.h>
0007
0008 #ifndef QOPERATINGSYSTEMVERSION_H
0009 #define QOPERATINGSYSTEMVERSION_H
0010
0011 QT_BEGIN_NAMESPACE
0012
0013 #if 0
0014 # pragma qt_class(QOperatingSystemVersionBase)
0015 # pragma qt_class(QOperatingSystemVersion)
0016 # pragma qt_sync_stop_processing
0017 #endif
0018
0019 class QString;
0020
0021 class QOperatingSystemVersionBase
0022 {
0023 public:
0024
0025
0026 enum OSType {
0027 Unknown = 0,
0028 Windows,
0029 MacOS,
0030 IOS,
0031 TvOS,
0032 WatchOS,
0033 Android,
0034 VisionOS,
0035 };
0036
0037 constexpr QOperatingSystemVersionBase(OSType osType,
0038 int vmajor, int vminor = -1, int vmicro = -1)
0039 : m_os(osType),
0040 m_major(vmajor),
0041 m_minor(vminor),
0042 m_micro(vmicro)
0043 { }
0044
0045 static Q_CORE_EXPORT QOperatingSystemVersionBase current();
0046 static Q_CORE_EXPORT QString name(QOperatingSystemVersionBase osversion);
0047 static Q_CORE_EXPORT bool isAnyOfType(std::initializer_list<OSType> types, OSType type);
0048
0049 static constexpr OSType currentType()
0050 {
0051 #if defined(Q_OS_WIN)
0052 return Windows;
0053 #elif defined(Q_OS_MACOS)
0054 return MacOS;
0055 #elif defined(Q_OS_IOS)
0056 return IOS;
0057 #elif defined(Q_OS_TVOS)
0058 return TvOS;
0059 #elif defined(Q_OS_WATCHOS)
0060 return WatchOS;
0061 #elif defined(Q_OS_VISIONOS)
0062 return VisionOS;
0063 #elif defined(Q_OS_ANDROID)
0064 return Android;
0065 #else
0066 return Unknown;
0067 #endif
0068 }
0069
0070 inline QVersionNumber version() const { return QVersionNumber(m_major, m_minor, m_micro); }
0071
0072 constexpr int majorVersion() const { return m_major; }
0073 constexpr int minorVersion() const { return m_minor; }
0074 constexpr int microVersion() const { return m_micro; }
0075
0076 constexpr int segmentCount() const
0077 { return m_micro >= 0 ? 3 : m_minor >= 0 ? 2 : m_major >= 0 ? 1 : 0; }
0078
0079 inline bool isAnyOfType(std::initializer_list<OSType> types) const
0080 {
0081 return QOperatingSystemVersionBase::isAnyOfType(types, type());
0082 }
0083 constexpr OSType type() const { return m_os; }
0084 inline QString name() const { return name(*this); }
0085
0086 protected:
0087 static Q_CORE_EXPORT int compare(QOperatingSystemVersionBase v1,
0088 QOperatingSystemVersionBase v2) noexcept;
0089
0090 friend Qt::partial_ordering compareThreeWay(const QOperatingSystemVersionBase &lhs,
0091 const QOperatingSystemVersionBase &rhs) noexcept
0092 {
0093 if (lhs.type() != rhs.type())
0094 return Qt::partial_ordering::unordered;
0095 const int res = QOperatingSystemVersionBase::compare(lhs, rhs);
0096 return Qt::compareThreeWay(res, 0);
0097 }
0098 #ifdef __cpp_lib_three_way_comparison
0099 friend std::partial_ordering
0100 operator<=>(QOperatingSystemVersionBase lhs, QOperatingSystemVersionBase rhs) noexcept
0101 { return compareThreeWay(lhs, rhs); }
0102 #else
0103 friend bool
0104 operator>(QOperatingSystemVersionBase lhs, QOperatingSystemVersionBase rhs) noexcept
0105 { return is_gt(compareThreeWay(lhs, rhs)); }
0106
0107 friend bool
0108 operator>=(QOperatingSystemVersionBase lhs, QOperatingSystemVersionBase rhs) noexcept
0109 { return is_gteq(compareThreeWay(lhs, rhs)); }
0110
0111 friend bool
0112 operator<(QOperatingSystemVersionBase lhs, QOperatingSystemVersionBase rhs) noexcept
0113 { return is_lt(compareThreeWay(lhs, rhs)); }
0114
0115 friend bool
0116 operator<=(QOperatingSystemVersionBase lhs, QOperatingSystemVersionBase rhs) noexcept
0117 { return is_lteq(compareThreeWay(lhs, rhs)); }
0118 #endif
0119
0120 QOperatingSystemVersionBase() = default;
0121 private:
0122 static QOperatingSystemVersionBase current_impl();
0123
0124 OSType m_os;
0125 int m_major;
0126 int m_minor;
0127 int m_micro;
0128 };
0129
0130 #if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED) && !defined(Q_QDOC)
0131 class QOperatingSystemVersionUnexported : public QOperatingSystemVersionBase
0132 {
0133 public:
0134 using QOperatingSystemVersionBase::QOperatingSystemVersionBase;
0135 constexpr QOperatingSystemVersionUnexported(QOperatingSystemVersionBase other) noexcept
0136 : QOperatingSystemVersionBase(other) {}
0137 #else
0138 class QOperatingSystemVersion : public QOperatingSystemVersionBase
0139 {
0140 using QOperatingSystemVersionUnexported = QOperatingSystemVersionBase;
0141 public:
0142 #endif
0143
0144
0145 static constexpr QOperatingSystemVersionBase MacOSSonoma { QOperatingSystemVersionBase::MacOS, 14, 0 };
0146 static constexpr QOperatingSystemVersionBase MacOSSequoia { QOperatingSystemVersionBase::MacOS, 15, 0 };
0147 static constexpr QOperatingSystemVersionBase Android14 { QOperatingSystemVersionBase::Android, 14, 0 };
0148 static constexpr QOperatingSystemVersionBase Windows11_23H2 { QOperatingSystemVersionBase::Windows, 10, 0, 22631 };
0149 static constexpr QOperatingSystemVersionBase Windows11_24H2 { QOperatingSystemVersionBase::Windows, 10, 0, 26100 };
0150
0151 #if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED) && !defined(Q_QDOC)
0152 };
0153
0154 class Q_CORE_EXPORT QOperatingSystemVersion : public QOperatingSystemVersionUnexported
0155 {
0156 #endif
0157 public:
0158
0159 #if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED)
0160 enum OSType {
0161 Unknown = 0,
0162 Windows,
0163 MacOS,
0164 IOS,
0165 TvOS,
0166 WatchOS,
0167 Android,
0168 VisionOS,
0169 };
0170 #endif
0171
0172
0173
0174
0175 #if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED)
0176 static const QOperatingSystemVersion Windows7;
0177 static const QOperatingSystemVersion Windows8;
0178 static const QOperatingSystemVersion Windows8_1;
0179 static const QOperatingSystemVersion Windows10;
0180
0181 static const QOperatingSystemVersion OSXMavericks;
0182 static const QOperatingSystemVersion OSXYosemite;
0183 static const QOperatingSystemVersion OSXElCapitan;
0184 static const QOperatingSystemVersion MacOSSierra;
0185 static const QOperatingSystemVersion MacOSHighSierra;
0186 static const QOperatingSystemVersion MacOSMojave;
0187 static const QOperatingSystemVersion MacOSCatalina;
0188 static const QOperatingSystemVersion MacOSBigSur;
0189 static const QOperatingSystemVersion MacOSMonterey;
0190
0191 static const QOperatingSystemVersion AndroidJellyBean;
0192 static const QOperatingSystemVersion AndroidJellyBean_MR1;
0193 static const QOperatingSystemVersion AndroidJellyBean_MR2;
0194 static const QOperatingSystemVersion AndroidKitKat;
0195 static const QOperatingSystemVersion AndroidLollipop;
0196 static const QOperatingSystemVersion AndroidLollipop_MR1;
0197 static const QOperatingSystemVersion AndroidMarshmallow;
0198 static const QOperatingSystemVersion AndroidNougat;
0199 static const QOperatingSystemVersion AndroidNougat_MR1;
0200 static const QOperatingSystemVersion AndroidOreo;
0201 static const QOperatingSystemVersion AndroidOreo_MR1;
0202 static const QOperatingSystemVersion AndroidPie;
0203 static const QOperatingSystemVersion Android10;
0204 static const QOperatingSystemVersion Android11;
0205 #else
0206 static constexpr QOperatingSystemVersionBase Windows7 { QOperatingSystemVersionBase::Windows, 6, 1 };
0207 static constexpr QOperatingSystemVersionBase Windows8 { QOperatingSystemVersionBase::Windows, 6, 2 };
0208 static constexpr QOperatingSystemVersionBase Windows8_1 { QOperatingSystemVersionBase::Windows, 6, 3 };
0209 static constexpr QOperatingSystemVersionBase Windows10 { QOperatingSystemVersionBase::Windows, 10 };
0210
0211 static constexpr QOperatingSystemVersionBase OSXMavericks { QOperatingSystemVersionBase::MacOS, 10, 9 };
0212 static constexpr QOperatingSystemVersionBase OSXYosemite { QOperatingSystemVersionBase::MacOS, 10, 10 };
0213 static constexpr QOperatingSystemVersionBase OSXElCapitan { QOperatingSystemVersionBase::MacOS, 10, 11 };
0214 static constexpr QOperatingSystemVersionBase MacOSSierra { QOperatingSystemVersionBase::MacOS, 10, 12 };
0215 static constexpr QOperatingSystemVersionBase MacOSHighSierra { QOperatingSystemVersionBase::MacOS, 10, 13 };
0216 static constexpr QOperatingSystemVersionBase MacOSMojave { QOperatingSystemVersionBase::MacOS, 10, 14 };
0217 static constexpr QOperatingSystemVersionBase MacOSCatalina { QOperatingSystemVersionBase::MacOS, 10, 15 };
0218 static constexpr QOperatingSystemVersionBase MacOSBigSur = { QOperatingSystemVersionBase::MacOS, 11, 0 };
0219 static constexpr QOperatingSystemVersionBase MacOSMonterey = { QOperatingSystemVersionBase::MacOS, 12, 0 };
0220
0221 static constexpr QOperatingSystemVersionBase AndroidJellyBean { QOperatingSystemVersionBase::Android, 4, 1 };
0222 static constexpr QOperatingSystemVersionBase AndroidJellyBean_MR1 { QOperatingSystemVersionBase::Android, 4, 2 };
0223 static constexpr QOperatingSystemVersionBase AndroidJellyBean_MR2 { QOperatingSystemVersionBase::Android, 4, 3 };
0224 static constexpr QOperatingSystemVersionBase AndroidKitKat { QOperatingSystemVersionBase::Android, 4, 4 };
0225 static constexpr QOperatingSystemVersionBase AndroidLollipop { QOperatingSystemVersionBase::Android, 5, 0 };
0226 static constexpr QOperatingSystemVersionBase AndroidLollipop_MR1 { QOperatingSystemVersionBase::Android, 5, 1 };
0227 static constexpr QOperatingSystemVersionBase AndroidMarshmallow { QOperatingSystemVersionBase::Android, 6, 0 };
0228 static constexpr QOperatingSystemVersionBase AndroidNougat { QOperatingSystemVersionBase::Android, 7, 0 };
0229 static constexpr QOperatingSystemVersionBase AndroidNougat_MR1 { QOperatingSystemVersionBase::Android, 7, 1 };
0230 static constexpr QOperatingSystemVersionBase AndroidOreo { QOperatingSystemVersionBase::Android, 8, 0 };
0231 static constexpr QOperatingSystemVersionBase AndroidOreo_MR1 { QOperatingSystemVersionBase::Android, 8, 1 };
0232 static constexpr QOperatingSystemVersionBase AndroidPie { QOperatingSystemVersionBase::Android, 9, 0 };
0233 static constexpr QOperatingSystemVersionBase Android10 { QOperatingSystemVersionBase::Android, 10, 0 };
0234 static constexpr QOperatingSystemVersionBase Android11 { QOperatingSystemVersionBase::Android, 11, 0 };
0235 #endif
0236
0237 static constexpr QOperatingSystemVersionBase Windows10_1809 { QOperatingSystemVersionBase::Windows, 10, 0, 17763 };
0238 static constexpr QOperatingSystemVersionBase Windows10_1903 { QOperatingSystemVersionBase::Windows, 10, 0, 18362 };
0239 static constexpr QOperatingSystemVersionBase Windows10_1909 { QOperatingSystemVersionBase::Windows, 10, 0, 18363 };
0240 static constexpr QOperatingSystemVersionBase Windows10_2004 { QOperatingSystemVersionBase::Windows, 10, 0, 19041 };
0241 static constexpr QOperatingSystemVersionBase Windows10_20H2 { QOperatingSystemVersionBase::Windows, 10, 0, 19042 };
0242 static constexpr QOperatingSystemVersionBase Windows10_21H1 { QOperatingSystemVersionBase::Windows, 10, 0, 19043 };
0243 static constexpr QOperatingSystemVersionBase Windows10_21H2 { QOperatingSystemVersionBase::Windows, 10, 0, 19044 };
0244 static constexpr QOperatingSystemVersionBase Windows10_22H2 { QOperatingSystemVersionBase::Windows, 10, 0, 19045 };
0245 static constexpr QOperatingSystemVersionBase Windows11 { QOperatingSystemVersionBase::Windows, 10, 0, 22000 };
0246 static constexpr QOperatingSystemVersionBase Windows11_21H2 = Windows11;
0247 static constexpr QOperatingSystemVersionBase Windows11_22H2 { QOperatingSystemVersionBase::Windows, 10, 0, 22621 };
0248
0249 static constexpr QOperatingSystemVersionBase Android12 { QOperatingSystemVersionBase::Android, 12, 0 };
0250 static constexpr QOperatingSystemVersionBase Android12L { QOperatingSystemVersionBase::Android, 12, 0 };
0251 static constexpr QOperatingSystemVersionBase Android13 { QOperatingSystemVersionBase::Android, 13, 0 };
0252
0253 static constexpr QOperatingSystemVersionBase MacOSVentura { QOperatingSystemVersionBase::MacOS, 13, 0 };
0254
0255 constexpr QOperatingSystemVersion(const QOperatingSystemVersionBase &osversion)
0256 : QOperatingSystemVersionUnexported(osversion) {}
0257
0258 constexpr QOperatingSystemVersion(OSType osType, int vmajor, int vminor = -1, int vmicro = -1)
0259 : QOperatingSystemVersionUnexported(QOperatingSystemVersionBase::OSType(osType), vmajor, vminor,
0260 vmicro)
0261 {
0262 }
0263
0264 #if QT_CORE_REMOVED_SINCE(6, 3) || defined(Q_QDOC)
0265 static QOperatingSystemVersion current();
0266 #endif
0267
0268 static constexpr OSType currentType()
0269 {
0270 return OSType(QOperatingSystemVersionBase::currentType());
0271 }
0272
0273 #if QT_CORE_REMOVED_SINCE(6, 3) || defined(Q_QDOC)
0274 QVersionNumber version() const { return QOperatingSystemVersionBase::version(); }
0275
0276 constexpr int majorVersion() const { return QOperatingSystemVersionBase::majorVersion(); }
0277 constexpr int minorVersion() const { return QOperatingSystemVersionBase::minorVersion(); }
0278 constexpr int microVersion() const { return QOperatingSystemVersionBase::microVersion(); }
0279
0280 constexpr int segmentCount() const
0281 { return QOperatingSystemVersionBase::segmentCount(); }
0282 #endif
0283
0284 constexpr OSType type() const { return OSType(QOperatingSystemVersionBase::type()); }
0285 QT7_ONLY(Q_CORE_EXPORT) bool isAnyOfType(std::initializer_list<OSType> types) const;
0286 #if QT_CORE_REMOVED_SINCE(6, 3) || defined(Q_QDOC)
0287 QString name() const;
0288 #endif
0289
0290 private:
0291 QOperatingSystemVersion() = default;
0292
0293 #if QT_CORE_REMOVED_SINCE(6, 3)
0294
0295 [[maybe_unused]] static int compare(const QOperatingSystemVersion &v1,
0296 const QOperatingSystemVersion &v2);
0297 #endif
0298 };
0299 Q_DECLARE_TYPEINFO(QOperatingSystemVersion, Q_PRIMITIVE_TYPE);
0300
0301 #ifndef QT_NO_DEBUG_STREAM
0302 class QDebug;
0303 Q_CORE_EXPORT QDebug operator<<(QDebug debug, const QOperatingSystemVersion &ov);
0304 #endif
0305
0306 QT_END_NAMESPACE
0307
0308 #endif