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

Reading Battery Status on Linux/Ubuntu using QT

我目前正在使用 qt 开发针对平板电脑的应用程序 运行ning ubuntu 14.04

由于设备上只有一个电量不足的指示器,并且应用程序会 运行 全屏显示很长时间,所以我想在应用程序中显示一个电池指示器。搜索发现主要是旧结果或对 windows、android 或 ios api 的调用。

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

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

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

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