Вопрос:

Как определить, на какой платформе Qt работает во время выполнения?

qt qt4 cross-platform

24136 просмотра

4 ответа

7651 Репутация автора

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

Автор: andreas buykx Источник Размещён: 24.01.2009 08:54

Ответы (4)


26 плюса

1394 Репутация автора

Решение

Обратите внимание, что макросы 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.

Автор: Reed Hedges Размещён: 24.01.2009 06:27

59 плюса

4558 Репутация автора

Намерение: хотя мне неприятно поднимать вопрос, которому почти 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_ *.

Автор: Shinnok Размещён: 08.02.2011 08:08

1 плюс

443 Репутация автора

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

Автор: sunyata Размещён: 30.10.2017 06:32

0 плюса

85 Репутация автора

Вот часть моего кода для обнаружения Windows или Mac во время выполнения

        auto OSType= OSInfo.type();



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

        if (OSInfo < QOperatingSystemVersion::Windows7) // less than win7
        {
            return 0;
        }
Автор: Drl Sherif Omran Размещён: 12.06.2019 09:43
32x32