2009-01-24 52 views

回答

26

请注意,Q_WS_ *宏是在编译时定义的,但QSysInfo提供了一些运行时细节。

为了延长GS的函数来获取运行时的特定的Windows版本,你可以做

#ifdef Q_WS_WIN 
switch(QSysInfo::windowsVersion()) 
{ 
    case QSysInfo::WV_2000: return "Windows 2000"; 
    case QSysInfo::WV_XP: return "Windows XP"; 
    case QSysInfo::WV_VISTA: return "Windows Vista"; 
    default: return "Windows"; 
} 
#endif 

,并为Mac类似。

+1

废弃了,因为Qt的5.在Shinnok的答案是正确的。 – SexyBeast 2016-02-06 16:59:36

56

意向:虽然我不想提了一个问题 这是近2年的时候,我觉得 一个好的修正答案是有价值 有记录,这样其他人 结束了在这个问题上能以正确的方式执行 。

我不禁注意到,大部分的答案建议使用Q_WS宏集,以确定操作系统,这不是一个很好的解决方案,因为Q_WS_ *指的是视窗系统,而不是工作系统平台(例如,X11可以在Windows或Mac OS X上运行,那么怎么办?),因此不应该按照这些宏来确定应用程序编译的平台。

取而代之的是应该使用Q_OS_ *宏集,这些宏具有确定操作系统的确切目的。

该组目前由以下的宏:

Q_OS_AIX 
Q_OS_BSD4 
Q_OS_BSDI 
Q_OS_CYGWIN 
Q_OS_DARWIN 
Q_OS_DGUX 
Q_OS_DYNIX 
Q_OS_FREEBSD 
Q_OS_HPUX 
Q_OS_HURD 
Q_OS_IRIX 
Q_OS_LINUX 
Q_OS_LYNX 
Q_OS_MAC 
Q_OS_MSDOS 
Q_OS_NETBSD 
Q_OS_OS2 
Q_OS_OPENBSD 
Q_OS_OS2EMX 
Q_OS_OSF 
Q_OS_QNX 
Q_OS_RELIANT 
Q_OS_SCO 
Q_OS_SOLARIS 
Q_OS_SYMBIAN 
Q_OS_ULTRIX 
Q_OS_UNIX 
Q_OS_UNIXWARE 
Q_OS_WIN32 
Q_OS_WINCE 

参考:http://doc.qt.io/qt-4.8/qtglobal.html

NB:由于在评论中提到由奇才,Qt的5完全除去Q_WS_ *设定宏,从而现在所有你可以使用的都是Q_OS_ *。

+4

总是欢迎好的答案 – 2011-02-08 20:12:06

0

对于QT5我使用以下命令:

logging.info("##### System Information #####") 
sysinfo = QtCore.QSysInfo() 
logging.info("buildCpuArchitecture: " + sysinfo.buildCpuArchitecture()) 
logging.info("currentCpuArchitecture: " + sysinfo.currentCpuArchitecture()) 
logging.info("kernel type and version: " + sysinfo.kernelType() + " " + sysinfo.kernelVersion()) 
logging.info("product name and version: " + sysinfo.prettyProductName()) 
logging.info("#####") 

文档:http://doc.qt.io/qt-5/qsysinfo.html