Russian Qt Forum
Ноябрь 23, 2024, 03:00 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как определить систему (Windows/Linux/*BSD/MacOS X) из Qt?  (Прочитано 21987 раз)
vipet
Бывалый
*****
Offline Offline

Сообщений: 452


Просмотр профиля
« : Октябрь 12, 2007, 11:37 »


Есть ли в Qt какая-нибудь функция для определения операциооной системы и ее версии, в которой запущена программа на Qt?
Записан
NiiLit
Гость
« Ответ #1 : Октябрь 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

        ...

« Последнее редактирование: Октябрь 12, 2007, 11:57 от NiiLit » Записан
vipet
Бывалый
*****
Offline Offline

Сообщений: 452


Просмотр профиля
« Ответ #2 : Октябрь 12, 2007, 12:01 »


первое что пришло в голову:
...   #ifdef Q_OS_WIN32   ...

Спасибо, похоже, то, что надо!
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Октябрь 12, 2007, 19:40 »

#ifdef Q_OS_WIN32 - это не функция распознания системы, а условная компиляция. Т.е. распознавания системы из кути не происходит, распознает ось компилятор.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ритт
Гость
« Ответ #4 : Октябрь 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
}

несложно адаптировать под твои нужды
Записан
vipet
Бывалый
*****
Offline Offline

Сообщений: 452


Просмотр профиля
« Ответ #5 : Октябрь 12, 2007, 20:46 »

#ifdef Q_OS_WIN32 - это не функция распознания системы, а условная компиляция. Т.е. распознавания системы из кути не происходит, распознает ось компилятор.

Ну эт понятно Подмигивающий По-любому код для другой ОС не нужен в программе, работающей на данной ОС.

я использую такую обёртку:
...

ТО ЧТО НАДО! Спасибо!
Записан
ритт
Гость
« Ответ #6 : Октябрь 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;
}
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Октябрь 12, 2008, 11:02 »

Может в вики закинешь?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ритт
Гость
« Ответ #8 : Октябрь 12, 2008, 13:15 »

пантер, закинь сам? двое суток перед монитором - уже котелок плохо варит Грустный
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Октябрь 12, 2008, 13:21 »

Хорошо. Сегодня постараюсь закинуть.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Alex03
Гость
« Ответ #10 : Октябрь 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
точно есть.
Записан
ритт
Гость
« Ответ #11 : Октябрь 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;
}
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #12 : Октябрь 13, 2008, 11:24 »

Вы определитесь. Я уже в вики закинул - переделывать?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
OS2
Самовар
**
Offline Offline

Сообщений: 186



Просмотр профиля WWW
« Ответ #13 : Октябрь 17, 2008, 13:55 »

2 panter_dsd
А что за вики, если не секрет?  Строит глазки
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #14 : Октябрь 17, 2008, 17:22 »

http://prog.org.ru/qt_wiki/ Улыбающийся
Помощь приветствуется. Подмигивающий
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.09 секунд. Запросов: 23.