Название: Как определить систему (Windows/Linux/*BSD/MacOS X) из Qt?
Отправлено: vipet от Октябрь 12, 2007, 11:37
Есть ли в Qt какая-нибудь функция для определения операциооной системы и ее версии, в которой запущена программа на Qt?
Название: Re: Как определить систему (Windows/Linux/*BSD/MacOS X) из Qt?
Отправлено: NiiLit от Октябрь 12, 2007, 11:55
Есть ли в Qt какая-нибудь функция для определения операциооной системы и ее версии, в которой запущена программа на Qt?
первое что пришло в голову: int main(int argc, char ** argv) { QApplication app( argc, argv ); #ifdef Q_OS_WIN32 QMessageBox::warning(0, QObject::tr("System"), QObject::tr("Windows")); #endif #ifdef Q_OS_LINUX QMessageBox::warning(0, QObject::tr("System"), QObject::tr("Linux")); #endif ...
Название: Re: Как определить систему (Windows/Linux/*BSD/MacOS X) из Qt?
Отправлено: vipet от Октябрь 12, 2007, 12:01
первое что пришло в голову: ... #ifdef Q_OS_WIN32 ...
Спасибо, похоже, то, что надо!
Название: Re: Как определить систему (Windows/Linux/*BSD/MacOS X) из Qt?
Отправлено: Пантер от Октябрь 12, 2007, 19:40
#ifdef Q_OS_WIN32 - это не функция распознания системы, а условная компиляция. Т.е. распознавания системы из кути не происходит, распознает ось компилятор.
Название: Re: Как определить систему (Windows/Linux/*BSD/MacOS X) из Qt?
Отправлено: ритт от Октябрь 12, 2007, 20:14
я использую такую обёртку: QString Helper::osVersion() { #ifdef Q_OS_LINUX utsname buf; if(!uname(&buf)) return QString("GNU/") + buf.sysname + " (Linux " + buf.release + ")"; else return "GNU/Linux"; #else #ifdef Q_OS_MAC switch(QSysInfo::MacintoshVersion) { case QSysInfo::MV_CHEETAH : return "MacOS 10.0(Cheetah)"; case QSysInfo::MV_PUMA : return "MacOS 10.1(Puma)"; case QSysInfo::MV_JAGUAR : return "MacOS 10.2(Jaguar)"; case QSysInfo::MV_PANTHER : return "MacOS 10.3(Panther)"; case QSysInfo::MV_TIGER : return "MacOS 10.4(Tiger)"; case QSysInfo::MV_LEOPARD : return "MacOS 10.5(Leopard)"; case QSysInfo::MV_Unknown : return "MacOS(unknown)"; default : return "MacOS(unknown)"; } #else #ifdef Q_OS_WIN switch(QSysInfo::WindowsVersion) { case QSysInfo::WV_32s : return "Windows 3.1 with Win32s"; case QSysInfo::WV_95 : return "Windows 95"; case QSysInfo::WV_98 : return "Windows 98"; case QSysInfo::WV_Me : return "Windows Me";
case QSysInfo::WV_NT : return "Windows NT"; case QSysInfo::WV_2000 : return "Windows 2000"; case QSysInfo::WV_XP : return "Windows XP"; case QSysInfo::WV_2003 : return "Windows Server 2003"; case QSysInfo::WV_VISTA : return "Windows Vista";
case QSysInfo::WV_CE : return "Windows CE"; case QSysInfo::WV_CENET : return "Windows CE .NET"; default : return "Windows(unknown)"; } #else return "Unknown"; #endif #endif #endif }
несложно адаптировать под твои нужды
Название: Re: Как определить систему (Windows/Linux/*BSD/MacOS X) из Qt?
Отправлено: vipet от Октябрь 12, 2007, 20:46
#ifdef Q_OS_WIN32 - это не функция распознания системы, а условная компиляция. Т.е. распознавания системы из кути не происходит, распознает ось компилятор.
Ну эт понятно ;) По-любому код для другой ОС не нужен в программе, работающей на данной ОС. я использую такую обёртку: ... ТО ЧТО НАДО! Спасибо!
Название: Re: Как определить систему (Windows/Linux/*BSD/MacOS X) из Qt?
Отправлено: ритт от Октябрь 12, 2008, 09:16
обновил немного код: улучшил распознавание версий под линух, слегка оптимизировал, добавил л1с для совместимости... QString osVersion() { static QString osVersion; if(osVersion.isEmpty()) { #if defined(Q_OS_LINUX) utsname buf; if(uname(&buf) != -1) { osVersion.append(buf.release).append(QLatin1Char(' ')); osVersion.append(buf.sysname).append(QLatin1Char(' ')); osVersion.append(buf.machine).append(QLatin1Char(' ')); osVersion.append(QLatin1String(" (")).append(buf.machine).append(QLatin1Char(')')); } else { osVersion = QLatin1String("Linux(unknown)"); } #elif defined(Q_OS_MAC) switch(QSysInfo::MacintoshVersion) { case QSysInfo::MV_LEOPARD: osVersion = QLatin1String("MacOS 10.5(Leopard)"); break; case QSysInfo::MV_TIGER: osVersion = QLatin1String("MacOS 10.4(Tiger)"); break; case QSysInfo::MV_PANTHER: osVersion = QLatin1String("MacOS 10.3(Panther)"); break; case QSysInfo::MV_JAGUAR: osVersion = QLatin1String("MacOS 10.2(Jaguar)"); break; case QSysInfo::MV_PUMA: osVersion = QLatin1String("MacOS 10.1(Puma)"); break; case QSysInfo::MV_CHEETAH: osVersion = QLatin1String("MacOS 10.0(Cheetah)"); break; case QSysInfo::MV_9: osVersion = QLatin1String("MacOS 9"); break;
case QSysInfo::MV_Unknown: default: osVersion = QLatin1String("MacOS(unknown)"); break; } #elif defined(Q_OS_WIN) switch(QSysInfo::WindowsVersion) { case QSysInfo::WV_CE_6: osVersion = QLatin1String("Windows CE 6.x"); break; case QSysInfo::WV_CE_5: osVersion = QLatin1String("Windows CE 5.x"); break; case QSysInfo::WV_CENET: osVersion = QLatin1String("Windows CE .NET"); break; case QSysInfo::WV_CE: osVersion = QLatin1String("Windows CE"); break;
case QSysInfo::WV_VISTA: osVersion = QLatin1String("Windows Vista"); break; case QSysInfo::WV_2003: osVersion = QLatin1String("Windows Server 2003"); break; case QSysInfo::WV_XP: osVersion = QLatin1String("Windows XP"); break; case QSysInfo::WV_2000: osVersion = QLatin1String("Windows 2000"); break; case QSysInfo::WV_NT: osVersion = QLatin1String("Windows NT"); break;
case QSysInfo::WV_Me: osVersion = QLatin1String("Windows Me"); break; case QSysInfo::WV_98: osVersion = QLatin1String("Windows 98"); break; case QSysInfo::WV_95: osVersion = QLatin1String("Windows 95"); break; case QSysInfo::WV_32s: osVersion = QLatin1String("Windows 3.1 with Win32s"); break;
default: osVersion = QLatin1String("Windows(unknown)"); break; }
if(QSysInfo::WindowsVersion & QSysInfo::WV_CE_based) osVersion.append(QLatin1String(" (CE-based)")); else if(QSysInfo::WindowsVersion & QSysInfo::WV_NT_based) osVersion.append(QLatin1String(" (NT-based)")); else if(QSysInfo::WindowsVersion & QSysInfo::WV_DOS_based) osVersion.append(QLatin1String(" (MS-DOS-based)")); #else return QLatin1String("Unknown"); #endif }
return osVersion; }
Название: Re: Как определить систему (Windows/Linux/*BSD/MacOS X) из Qt?
Отправлено: Пантер от Октябрь 12, 2008, 11:02
Может в вики закинешь?
Название: Re: Как определить систему (Windows/Linux/*BSD/MacOS X) из Qt?
Отправлено: ритт от Октябрь 12, 2008, 13:15
пантер, закинь сам? двое суток перед монитором - уже котелок плохо варит :(
Название: Re: Как определить систему (Windows/Linux/*BSD/MacOS X) из Qt?
Отправлено: Пантер от Октябрь 12, 2008, 13:21
Хорошо. Сегодня постараюсь закинуть.
Название: Re: Как определить систему (Windows/Linux/*BSD/MacOS X) из Qt?
Отправлено: Alex03 от Октябрь 13, 2008, 06:08
думаю что под многими *nix-ами uname есть, не только под линуксом. По крайней мере линуксячий man говорит СООТВЕТСТВИЕ СТАНДАРТАМ SVr4, SVID, POSIX, X/OPEN. В BSD 4.3 вызова uname не существует.
Например под такой SunOS #uname -a SunOS hasname 5.10 Generic_127111-11 sun4u sparc SUNW,Sun-Fire-V490 точно есть.
Название: Re: Как определить систему (Windows/Linux/*BSD/MacOS X) из Qt?
Отправлено: ритт от Октябрь 13, 2008, 08:34
хорошо, тогда вот так? ) QString osVersion() { static QString osVersion; if(osVersion.isEmpty()) { #if defined(Q_OS_MAC) switch(QSysInfo::MacintoshVersion) { case QSysInfo::MV_LEOPARD: osVersion = QLatin1String("MacOS 10.5(Leopard)"); break; case QSysInfo::MV_TIGER: osVersion = QLatin1String("MacOS 10.4(Tiger)"); break; case QSysInfo::MV_PANTHER: osVersion = QLatin1String("MacOS 10.3(Panther)"); break; case QSysInfo::MV_JAGUAR: osVersion = QLatin1String("MacOS 10.2(Jaguar)"); break; case QSysInfo::MV_PUMA: osVersion = QLatin1String("MacOS 10.1(Puma)"); break; case QSysInfo::MV_CHEETAH: osVersion = QLatin1String("MacOS 10.0(Cheetah)"); break; case QSysInfo::MV_9: osVersion = QLatin1String("MacOS 9"); break;
case QSysInfo::MV_Unknown: default: osVersion = QLatin1String("MacOS(unknown)"); break; } #elif defined(Q_OS_UNIX) utsname buf; if(uname(&buf) != -1) { osVersion.append(buf.release).append(QLatin1Char(' ')); osVersion.append(buf.sysname).append(QLatin1Char(' ')); osVersion.append(buf.machine).append(QLatin1Char(' ')); osVersion.append(QLatin1String(" (")).append(buf.machine).append(QLatin1Char(')')); } else { osVersion = QLatin1String("Linux/Unix(unknown)"); } #elif defined(Q_WS_WIN) || defined(Q_OS_CYGWIN) switch(QSysInfo::WindowsVersion) { case QSysInfo::WV_CE_6: osVersion = QLatin1String("Windows CE 6.x"); break; case QSysInfo::WV_CE_5: osVersion = QLatin1String("Windows CE 5.x"); break; case QSysInfo::WV_CENET: osVersion = QLatin1String("Windows CE .NET"); break; case QSysInfo::WV_CE: osVersion = QLatin1String("Windows CE"); break;
case QSysInfo::WV_VISTA: osVersion = QLatin1String("Windows Vista"); break; case QSysInfo::WV_2003: osVersion = QLatin1String("Windows Server 2003"); break; case QSysInfo::WV_XP: osVersion = QLatin1String("Windows XP"); break; case QSysInfo::WV_2000: osVersion = QLatin1String("Windows 2000"); break; case QSysInfo::WV_NT: osVersion = QLatin1String("Windows NT"); break;
case QSysInfo::WV_Me: osVersion = QLatin1String("Windows Me"); break; case QSysInfo::WV_98: osVersion = QLatin1String("Windows 98"); break; case QSysInfo::WV_95: osVersion = QLatin1String("Windows 95"); break; case QSysInfo::WV_32s: osVersion = QLatin1String("Windows 3.1 with Win32s"); break;
default: osVersion = QLatin1String("Windows(unknown)"); break; }
if(QSysInfo::WindowsVersion & QSysInfo::WV_CE_based) osVersion.append(QLatin1String(" (CE-based)")); else if(QSysInfo::WindowsVersion & QSysInfo::WV_NT_based) osVersion.append(QLatin1String(" (NT-based)")); else if(QSysInfo::WindowsVersion & QSysInfo::WV_DOS_based) osVersion.append(QLatin1String(" (MS-DOS-based)")); #else return QLatin1String("Unknown"); #endif }
return osVersion; }
Название: Re: Как определить систему (Windows/Linux/*BSD/MacOS X) из Qt?
Отправлено: Пантер от Октябрь 13, 2008, 11:24
Вы определитесь. Я уже в вики закинул - переделывать?
Название: Re: Как определить систему (Windows/Linux/*BSD/MacOS X) из Qt?
Отправлено: OS2 от Октябрь 17, 2008, 13:55
2 panter_dsd А что за вики, если не секрет? ::)
Название: Re: Как определить систему (Windows/Linux/*BSD/MacOS X) из Qt?
Отправлено: Пантер от Октябрь 17, 2008, 17:22
http://prog.org.ru/qt_wiki/ :) Помощь приветствуется. ;)
|