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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Определение графической оболочки [Linux]  (Прочитано 4490 раз)
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« : Июнь 07, 2012, 10:11 »

Можно ли средствами Qt определить в какой графической среде исполняется программа (Gnome,KDE,Unity) ? Может не средствами Qt, если можно то как ? Макроса на это дело чет не нашел. Хотя вообще сомневаюсь можно ли такое определить.
Записан
DmitryM
Гость
« Ответ #1 : Июнь 07, 2012, 10:24 »

Тип оболочки записано в переменных окружения, поэтому qgetenv в помощь.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #2 : Июнь 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 ничего не скажу.
Записан

Qt 5.11/4.8.7 (X11/Win)
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #3 : Июнь 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";
   }
 
« Последнее редактирование: Июнь 07, 2012, 10:48 от ecspertiza » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Июнь 07, 2012, 10:49 »

Код:
    }else if (qgetenv("XDG_CURRENT_DESKTOP").toLower() == "kde") {
На kde3.5 это не прокатит.
Записан

Qt 5.11/4.8.7 (X11/Win)
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #5 : Июнь 07, 2012, 11:01 »

Тож заметил уже, решил потестить на разных платформах, на OpenSuSe мой метод не заработал, там вроде даже 4ые кеды стоят. Значит буду использовать метод который используется в Qt, думаю он уже не раз проверен  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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