2015-06-11 7 views
5

В настоящее время я занимаюсь разработкой приложений с использованием Qt ориентации планшет работает Ubuntu 14.04Статус Чтение батареи на Linux/Ubuntu с использованием QT

Поскольку существует только плохой индикатор батареи на устройстве и приложение будет работать в полноэкранном режиме на длительное время , я хочу показать индикатор батареи внутри приложения. Поиск обнаружил в основном старые результаты или вызовы в windows, android или ios apis.

Есть ли способ использовать только Qt apis или другой удобный способ получить информацию о состоянии батареи?

+0

Вы можете посмотреть, как это было реализовано в Qt Mobility: https://github.com/enthought/qt-mobility/blob/master/src/systeminfo/qsystembatteryinfo.cpp – danielfranca

+0

См https: // forum.qt.io/topic/18874/qt-c-how-to-check-battery-level-laptop/4. – user1929959

+0

попробуйте http://askubuntu.com/questions/324222/how-to-check-battery-status-with-the-ubuntu-sdk – nkcode

ответ

0

Несмотря на то, что ответ пользователя vahanchos был полезен для меня, и, вероятно, это путь для других, у меня получилось другое решение.

В моем случае я кодирую только один тип специального устройства и известный набор машин для разработки. поэтому я мог бы просто прочитать соответствующие файлы в sys/class/power_supply/. Я не могу гарантировать, что другие устройства будут называть их файлы точно такими же. Но, возможно, стоит попробовать.

#include <QFile> 

void refreshValues(){ 
    QFile acLine("/sys/class/power_supply/AC/online"); 
    QFile acAdp("/sys/class/power_supply/ADP0/online"); 
    QFile bCap("/sys/class/power_supply/BAT0/capacity"); 
    bool ac = false; 
    int level = 0; 
    if(acLine.exists()){ 
     acLine.open(QIODevice::ReadOnly | QIODevice::Text); 
     if(QString(acLine.readAll()).toInt()){ 
      ac = true; 
     } 
     acLine.close(); 
    }else if(acAdp.exists()){ 
     acAdp.open(QIODevice::ReadOnly | QIODevice::Text); 
     if(QString(acAdp.readAll()).toInt()){ 
      ac = true; 
     } 
     acAdp.close(); 
    } 
    if(bCap.exists()){ 
     bCap.open(QIODevice::ReadOnly | QIODevice::Text); 
     level = QString(bCap.readAll()).toInt(); 
     bCap.close(); 
    } 
    setAcPowerActive(ac); 
    setBatteryLevel(level); 
} 
2

Даже если такого API нет в Qt, вы можете найти утилиту командной строки (например, upower), которая возвращает данные о статусе аккумулятора и выполняет его из приложения Qt с помощью QProcess. После того как утилита завершит работу, вы можете прочитать ее стандартный вывод и проанализировать ее, чтобы найти всю необходимую информацию.

Для инструментов командной строки, связанных с батареей, в Ubuntu вы можете обратиться, например, к this page.