実行時にQtアプリケーションが実行されているプラットフォームを決定する(Qt)方法はありますか?
4 に答える
意図: ほぼ 2 年前の質問を持ち出すのは嫌いですが、この質問にたどり着いた他の人が正しい方法で回答できるように、適切な修正された回答を記録しておくことは価値があると思います。
Q_WS_* はオペレーティング システム プラットフォームではなくウィンドウ システムを参照するため (たとえば、. X11 は Windows または Mac OS X で実行できますが、その後はどうなるでしょうか?)、したがって、これらのマクロに従ってアプリケーションがコンパイルされたプラットフォームを判別するべきではありません。
代わりに、オペレーティング システムを特定するという正確な目的を持つマクロの Q_OS_* セットを使用する必要があります。
このセットは現在、Qt 4.8 用の次のマクロで構成されています。
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
参考文献:
- Qt 4 https://doc.qt.io/archives/qt-4.8/qtglobal.html
- Qt 5 https://doc.qt.io/qt-5/qtglobal.html
- Qt 6 https://doc.qt.io/qt-6/qtglobal.html
注: コメントで Wiz が述べたように、Qt 5 では Q_WS_* マクロ セットが完全に削除されたため、使用できるのは Q_OS_* マクロのみになりました。
Q_WS_* マクロはコンパイル時に定義されますが、QSysInfo は実行時の詳細を提供することに注意してください。
実行時に特定の Windows バージョンを取得するように gs の機能を拡張するには、次のようにします。
#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でも同様です。
Qt バージョン 5.9 以降を使用している場合は、下記のライブラリ関数を使用して正しい OS の詳細を取得してください。詳細については、こちらを参照してください。いくつかの追加機能を実行できるQSysInfoクラスもあります。
#ifdef Q_WS_WIN
#include <QOperatingSystemVersion>
switch(QOperatingSystemVersion::current())
{
case QOperatingSystemVersion::Windows7: return "Windows 7";
case QOperatingSystemVersion::Windows8: return "Windows 8";
case QOperatingSystemVersion::Windows10: return "Windows 10";
default: return "Windows";
}
#endif