在Qt5.12.4中,QSysInfo提供的查询操作系统类型和版本的接口已经定义为过时。但并不是说这整个类被定义为过时的。
Public Types
(obsolete) enum MacVersion { MV_9, MV_10_0, MV_10_1, MV_10_2, …, MV_None }
(obsolete) enum WinVersion { WV_32s, WV_95, WV_98, WV_Me, …, WV_None }
Static Public Members
(obsolete) const QSysInfo::MacVersion MacintoshVersion
(obsolete) const QSysInfo::WinVersion WindowsVersion
(obsolete) QSysInfo::MacVersion macVersion()
(obsolete) QSysInfo::WinVersion windowsVersion()
新的方法是使用QOperatingSystemVersion类提供的方法,但只能查询Windows或Mac的系统信息,其构造函数只有一个,如下:
QOperatingSystemVersion::QOperatingSystemVersion(QOperatingSystemVersion::OSType osType, int vmajor, int vminor = …, int vmicro = …)
Constructs a QOperatingSystemVersion consisting of the OS type osType, and major, minor, and micro version numbers vmajor, vminor and vmicro, respectively.
构造Windows系统相应的版本,可参考下面的表格。
OSType | vmajor | vminor | vmicro | OSName |
---|---|---|---|---|
QOperatingSystemVersion::Windows | 6 | 1 | - | Windows7 |
QOperatingSystemVersion::Windows | 6 | 2 | - | Windows8 |
QOperatingSystemVersion::Windows | 6 | 3 | - | Windows8_1 |
QOperatingSystemVersion::Windows | 10 | 0 | - | Windows10 |
例如构造一个Win10的类,
QOperatingSystemVersion win10 = QOperatingSystemVersion(QOperatingSystemVersion::Windows, 10,0)
判断当前操作系统是否是Win10的版本,可以用如下方法:
if ( QOperatingSystemVersion::current() < QOperatingSystemVersion(QOperatingSystemVersion::Windows, 10, 0))
{
/* 如果当前系统版本低于win10,例如win7、win8、win8.1, todo */
}
else
{
/* 如果当前系统版本是win10,todo */
}
需要注意的是,QOperatingSystemVersion类没有直接判断是否相等的方法,也就是说,你不能这么写。
/* 错误的写法 */
if (QOperatingSystemVersion::current() == QOperatingSystemVersion(QOperatingSystemVersion::Windows, 10, 0))