如何确定Qt在运行时运行的平台?

时间:2009-01-24 08:54:54

标签: qt qt4 cross-platform

是否有(Qt)方法确定Qt应用程序在运行时运行的平台?

4 个答案:

答案 0 :(得分:59)

  

意图:虽然我讨厌提出一个问题   我想,差不多有两年了   一个好的修正答案是有价值的   有记录,以便其他人   最后这个问题可以做到   正确的方式。

我不禁注意到大多数答案建议使用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 :(得分: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类似。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

这是我的代码的一部分,用于在运行时检测Windows或Mac及其版本

        #include <QSysInfo>
        #include <QOperatingSystemVersion>
        auto OSType= OSInfo.type();
        auto OSInfo = QOperatingSystemVersion::current();


        if (OSType !=1) //not windows os
        {
            return 0;
        }

        if (OSInfo < QOperatingSystemVersion::Windows7) // less than win7
        {
            return 0;
        }