使用QT在Linux / Ubuntu上读取电池状态

时间:2015-06-11 08:54:36

标签: c++ linux qt ubuntu battery

我目前正在开发一个使用qt定位运行ubuntu 14.04的平板电脑的应用程序

由于设备上只有一个电池指示灯不足,应用程序将长时间全屏运行,我想在应用程序内显示一个电池指示灯。搜索主要是旧结果或调用windows,android或ios apis。

有没有办法只使用Qt api或其他舒适的方式来获取有关电池状态的信息?

2 个答案:

答案 0 :(得分:2)

即使Qt中没有这样的API,您也可以找到一个命令行实用程序(例如upower),它返回电池状态详细信息并使用QProcess从Qt应用程序执行它。实用程序完成工作后,您可以读取其标准输出并解析它以查找所有必要的信息。

对于Ubuntu中与电池相关的命令行工具,您可以参考,例如this page

答案 1 :(得分:1)

尽管用户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);
}