Kai*_*alz 22 c++ qt operating-system
我需要弄清楚我的程序在运行时运行的操作系统.
我正在使用Qt 4.6.2,MinGW和Eclipse与CDT.我的程序应在Windows或Linux上运行命令行QProcess.现在我需要一种开关来根据操作系统运行不同的代码.
谢谢
Ale*_*lke 22
实际上,操作系统是由Q_OS _...宏定义的.只是说.Q_WS _...是窗口系统.不完全一样.(我只是在阅读问题的作者所写的内容......"操作系统".)
这些声明可以在qglobal.h文件中找到.
Use Q_OS_x with x being one of:
DARWIN - Darwin OS (synonym for Q_OS_MAC)
SYMBIAN - Symbian
MSDOS - MS-DOS and Windows
OS2 - OS/2
OS2EMX - XFree86 on OS/2 (not PM)
WIN32 - Win32 (Windows 2000/XP/Vista/7 and Windows Server 2003/2008)
WINCE - WinCE (Windows CE 5.0)
CYGWIN - Cygwin
SOLARIS - Sun Solaris
HPUX - HP-UX
ULTRIX - DEC Ultrix
LINUX - Linux
FREEBSD - FreeBSD
NETBSD - NetBSD
OPENBSD - OpenBSD
BSDI - BSD/OS
IRIX - SGI Irix
OSF - HP Tru64 UNIX
SCO - SCO OpenServer 5
UNIXWARE - UnixWare 7, Open UNIX 8
AIX - AIX
HURD - GNU Hurd
DGUX - DG/UX
RELIANT - Reliant UNIX
DYNIX - DYNIX/ptx
QNX - QNX
QNX6 - QNX RTP 6.1
LYNX - LynxOS
BSD4 - Any BSD 4.4 system
UNIX - Any UNIX BSD/SYSV system
Run Code Online (Sandbox Code Playgroud)
窗口系统定义如下:
Use Q_WS_x where x is one of:
MACX - Mac OS X
MAC9 - Mac OS 9
QWS - Qt for Embedded Linux
WIN32 - Windows
X11 - X Window System
S60 - Symbian S60
PM - unsupported
WIN16 - unsupported
Run Code Online (Sandbox Code Playgroud)
使用#ifdef的一个主要问题是确保如果你在一个"新"平台上编译(从未在该平台上编译该软件),那么你想使用#elif defined(...)至少一个#else+ #error...
#ifdef W_OS_LINUX
std::cout << "Linux version";
#elif defined(W_OS_CYGWIN)
std::cout << "Cygwin version";
#else
#error "We don't support that version yet..."
#endif
Run Code Online (Sandbox Code Playgroud)
由于没有定义Qt5宏Q_WS_*!
您应该使用Q_OS_*宏来代替:
Q_OS_AIX
Q_OS_ANDROID
Q_OS_BSD4
Q_OS_BSDI
Q_OS_CYGWIN
Q_OS_DARWIN - Darwin-based OS such as OS X and iOS, including any open source version(s) of Darwin.
Q_OS_DGUX
Q_OS_DYNIX
Q_OS_FREEBSD
Q_OS_HPUX
Q_OS_HURD
Q_OS_IOS
Q_OS_IRIX
Q_OS_LINUX
Q_OS_LYNX
Q_OS_MAC - Darwin-based OS distributed by Apple, which currently includes OS X and iOS, but not the open source version.
Q_OS_NETBSD
Q_OS_OPENBSD
Q_OS_OSF
Q_OS_OSX
Q_OS_QNX
Q_OS_RELIANT
Q_OS_SCO
Q_OS_SOLARIS
Q_OS_ULTRIX
Q_OS_UNIX
Q_OS_UNIXWARE
Q_OS_WIN32 - 32-bit and 64-bit versions of Windows (not on Windows CE).
Q_OS_WIN64
Q_OS_WIN - all supported versions of Windows. That is, if Q_OS_WIN32, Q_OS_WIN64 or Q_OS_WINCE is defined.
Q_OS_WINCE
Q_OS_WINPHONE
Q_OS_WINRT
Run Code Online (Sandbox Code Playgroud)
QtGlobal文档中的更多细节
大多数这些答案提供了确定所需要的信息在解决方案编译的时候,当你的应用程序被编译在你的开发机.
以下是在运行时,当您的应用程序的用户在其计算机上运行您的应用程序时,如何获取所需信息.
qDebug() << "currentCpuArchitecture():" << QSysInfo::currentCpuArchitecture();
qDebug() << "productType():" << QSysInfo::productType();
qDebug() << "productVersion():" << QSysInfo::productVersion();
qDebug() << "prettyProductName():" << QSysInfo::prettyProductName();
Run Code Online (Sandbox Code Playgroud)
典型结果:
21:43:09.855 Debug: currentCpuArchitecture(): "x86_64"
21:43:09.855 Debug: productType(): "windows"
21:43:09.855 Debug: productVersion(): "10"
21:43:09.855 Debug: prettyProductName(): "Windows 10 (10.0)"
Run Code Online (Sandbox Code Playgroud)
文档QSysInfo是在这里.