28

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

4

4 回答 4

65

意图:虽然我讨厌提出一个将近 2 年的问题,但我认为一个好的修正答案值得记录在案,以便最终解决这个问题的其他人可以以正确的方式做到这一点。

我不禁注意到,大多数答案都建议使用 Q_WS 宏集来确定操作系统,这不是一个好的解决方案,因为 Q_WS_* 指的是窗口系统而不是操作系统平台(例如。 X11 可以在 Windows 或 Mac OS X 上运行,然后呢?),因此不应遵循这些宏来确定应用程序编译的平台。

相反,应该使用 Q_OS_* 一组具有确定操作系统的精确目的的宏。

该集当前包含 Qt 4.8 的以下宏:

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

参考:

注意:正如 Wiz 在评论中提到的,Qt 5 完全删除了 Q_WS_* 宏集,因此现在您只能使用 Q_OS_* 宏。

于 2011-02-08T20:08:21.017 回答
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 类似。

如果您使用的是 Qt 5.9 或更高版本,请使用下面提到的库函数来检索正确的操作系统详细信息,更多信息可以在这里找到。还有一个QSysInfo类可以做一些额外的功能。

#ifdef Q_WS_WIN
#include <QOperatingSystemVersion>

switch(QOperatingSystemVersion::current())
{
  case QOperatingSystemVersion::Windows7: return "Windows 7";
  case QOperatingSystemVersion::Windows8: return "Windows 8";
  case QOperatingSystemVersion::Windows10: return "Windows 10";
  default: return "Windows";
}
#endif
于 2009-01-24T18:27:08.710 回答
2

对于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

于 2017-10-30T18:32:57.657 回答
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;
        }
于 2019-06-12T21:43:53.540 回答