Comment déterminer la plate-forme Qt est en cours d'exécution au moment de l'exécution?

Existe-t-il un moyen (Qt) de déterminer la plate-forme sur laquelle une application Qt s'exécute au moment de l'exécution?

25
demandé sur Georg Schölly 2009-01-24 11:54:53

3 réponses

Notez que les macros Q_WS_* sont définies au moment de la compilation, mais QSysInfo donne quelques détails au moment de l'exécution.

Pour étendre la fonction de gs pour obtenir la version Windows spécifique à l'exécution, vous pouvez faire

#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

Et similaire pour Mac.

26
répondu Reed Hedges 2009-01-24 18:27:08

Intention: alors que je déteste soulever une question c'est presque 2 ans, je pense qu'une bonne réponse modifiée est précieuse d'avoir sur le dossier afin que d'autres que finissez sur cette question peut le faire le droit chemin.

Je ne peux pas m'empêcher de remarquer que la plupart des réponses recommandent d'utiliser L'ensemble de macros Q_WS pour déterminer le système D'exploitation, ce n'est pas une bonne solution, puisque Q_WS_* se réfère au système de fenêtrage et non à la plate-forme du système D'exploitation(par exemple. X11 peut être exécuté sur Windows ou Mac OS X alors quoi?), donc il ne faut pas suivre ces macros pour déterminer la plate-forme pour laquelle l'application a été compilée.

Au lieu de cela, il faut utiliser L'ensemble de macros Q_OS_* qui ont pour but précis de déterminer le système D'exploitation.

L'ensemble se compose actuellement des macros suivantes:

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

Référence: http://doc.qt.io/qt-4.8/qtglobal.html

NB: comme mentionné par Wiz dans les commentaires, Qt 5 complètement supprimé le q_ws_ * ensemble de macros, donc maintenant tout ce que vous pouvez utiliser sont q_os_ * ceux.

57
répondu Shinnok 2015-08-12 17:25:15

Pour Qt5 j'utilise ce qui suit:

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("#####")

Documentation: http://doc.qt.io/qt-5/qsysinfo.html

0
répondu sunyata 2017-10-30 18:32:57