是否有(Qt)方法来确定Qt应用程序在运行时运行的平台?
意图:虽然我讨厌提出一个差不多2年的问题,但我认为一个好的修正答案对于记录是有价值的,以便最终能够以正确的方式完成这个问题的其他人.
我不禁注意到,大多数答案都建议使用Q_WS宏来确定操作系统,这不是一个好的解决方案,因为Q_WS_*指的是Windowing System而不是操作系统平台(例如. 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
注意:正如Wiz在评论中所提到的,Qt 5完全删除了Q_WS_*宏集,因此现在你只能使用Q_OS_*1.
请注意,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类似.