在运行时,我需要弄清楚我的程序运行在哪个操作系统上。
我使用的是Qt 4.6.2,MinGW和Eclipse with CDT。我的程序应该在Windows或Linux上运行命令行QProcess。现在我需要一种开关来根据操作系统运行不同的代码。
发布于 2011-12-19 09:25:30
实际上操作系统是由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
窗口系统定义如下:
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
使用#ifdef的主要问题之一是确保如果你在一个“新”平台上编译(从未在那个平台上编译过那个软件),那么你想要使用#elif defined(...)
和至少一个#else
+ #error
……
#ifdef Q_OS_LINUX
std::cout << "Linux version";
#elif defined(Q_OS_CYGWIN)
std::cout << "Cygwin version";
#else
#error "We don't support that version yet..."
#endif
发布于 2010-06-17 23:35:59
在Qt中,为编译时选项定义了以下OS宏
//之前定义了Qt5 Qt/X11 = Q_WS_X11。
定义了Qt/Windows = Q_WS_WIN。
Qt/Mac = Q_WS_MACX已定义
//对于Qt5以后的版本,定义了Qt/X11 = Q_OS_X11。
定义了Qt/Windows = Q_OS_WIN。
Qt/Mac = Q_OS_MACX已定义
然后,QSysInfo类在运行时为您提供操作系统版本和其他选项。
发布于 2010-06-17 23:37:01
如果你真的需要在运行时实现这一点,Qt提供了QSysInfo。对于附加到崩溃报告很有用,但对于其他任何情况,请尝试在编译时执行此操作。
https://stackoverflow.com/questions/3063110
复制相似问题