Russian Qt Forum

Qt => Общие вопросы => Тема начата: ecspertiza от Июнь 07, 2012, 10:11



Название: Определение графической оболочки [Linux]
Отправлено: ecspertiza от Июнь 07, 2012, 10:11
Можно ли средствами Qt определить в какой графической среде исполняется программа (Gnome,KDE,Unity) ? Может не средствами Qt, если можно то как ? Макроса на это дело чет не нашел. Хотя вообще сомневаюсь можно ли такое определить.


Название: Re: Определение графической оболочки [Linux]
Отправлено: DmitryM от Июнь 07, 2012, 10:24
Тип оболочки записано в переменных окружения, поэтому qgetenv в помощь.


Название: Re: Определение графической оболочки [Linux]
Отправлено: GreatSnake от Июнь 07, 2012, 10:31
Все определения есть в приватных классах Qt. Снаружи к ним не добраться.
Вот как сами тролли их определяют:
Код
C++ (Qt)
       if( !qgetenv( "KDE_FULL_SESSION" ).isEmpty() )
          ;   // kde
       else if( qgetenv( "DESKTOP_SESSION" ) == "gnome"  ||
                 !qgetenv( "GNOME_DESKTOP_SESSION_ID" ).isEmpty() )
          ;   // gnome
 
Насчёт Unity ничего не скажу.


Название: Re: Определение графической оболочки [Linux]
Отправлено: ecspertiza от Июнь 07, 2012, 10:44
Спасибо за советы. У меня вот так получилось

Код
C++ (Qt)
   if (qgetenv("XDG_CURRENT_DESKTOP").toLower() == "xfce") {
       qDebug() << "xfce";
   }else if (qgetenv("XDG_CURRENT_DESKTOP").toLower() == "kde") {
       qDebug() << "kde";
   }else if (qgetenv("XDG_CURRENT_DESKTOP").toLower() == "gnome") {
       qDebug() << "gnome";
   }else if (qgetenv("XDG_CURRENT_DESKTOP").toLower() == "unity") {
       qDebug() << "unity";
   }
 


Название: Re: Определение графической оболочки [Linux]
Отправлено: GreatSnake от Июнь 07, 2012, 10:49
Код:
    }else if (qgetenv("XDG_CURRENT_DESKTOP").toLower() == "kde") {
На kde3.5 это не прокатит.


Название: Re: Определение графической оболочки [Linux]
Отправлено: ecspertiza от Июнь 07, 2012, 11:01
Тож заметил уже, решил потестить на разных платформах, на OpenSuSe мой метод не заработал, там вроде даже 4ые кеды стоят. Значит буду использовать метод который используется в Qt, думаю он уже не раз проверен  :)