web-dev-qa-db-ja.com

Qtが実行時に実行されているプラ​​ットフォームを特定する方法は?

Qtアプリケーションが実行時に実行されているプラ​​ットフォームを判別する(Qt)方法はありますか?

25
andreas buykx

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でも同様です。

26
Reed Hedges

意図:2年近く前の質問を持ち出すのは嫌いですが、この質問にたどり着いた他の人が正しい方法でそれを行えるように、適切な修正された回答を記録しておくことは価値があると思います。

Q_WS_ *はオペレーティングシステムプラットフォームではなくウィンドウシステムを参照しているため、ほとんどの回答がQ_WSマクロセットを使用してオペレーティングシステムを決定することを推奨していることに気づかずにはいられません。 X11はWindowsまたはMacOS 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

注意:コメントでWizが述べたように、Qt5はQ_WS_ *マクロのセットを完全に削除したため、使用できるのはQ_OS_ *マクロだけです。

59
Shinnok

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

1
sunyata

これは、実行時にWindowsまたはMacを検出するためのコードの一部とバージョンです。

        #include <QSysInfo>
        #include <QOperatingSystemVersion>
        auto OSType= OSInfo.type();
        auto OSInfo = QOperatingSystemVersion::current();


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

        if (OSInfo < QOperatingSystemVersion::Windows7) // less than win7
        {
            return 0;
        }
0