Как определить, на какой платформе Qt работает во время выполнения? - PullRequest
25 голосов
/ 24 января 2009

Есть ли способ (Qt) определить платформу, на которой запущено приложение Qt во время выполнения?

Ответы [ 3 ]

59 голосов
/ 08 февраля 2011

Намерение: пока я не хочу поднимать вопрос это почти 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: Как упоминалось Wiz в комментариях, Qt 5 полностью удалил набор макросов Q_WS_ *, поэтому теперь вы можете использовать только Q_OS_ *.

26 голосов
/ 24 января 2009

Обратите внимание, что макросы 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 голос
/ 30 октября 2017

Для 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

...