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

6

我正在使用Qt开发一个应用程序,目标设备是运行Ubuntu 14.04的平板电脑。

由于设备上只有一个较差的电池指示器,并且应用程序将全屏运行很长时间,我想在应用程序内显示电池指示器。搜索发现主要是旧的结果或调用Windows、Android或iOS的API。

是否有仅使用Qt API或其他方便的方式来获取有关电池状态的信息的方法?


你可以看一下在Qt Mobility中是如何实现的:https://github.com/enthought/qt-mobility/blob/master/src/systeminfo/qsystembatteryinfo.cpp - dfranca
1
请参见 https://forum.qt.io/topic/18874/qt-c-how-to-check-battery-level-laptop/4。 - Mihai8
尝试以下链接:http://askubuntu.com/questions/324222/how-to-check-battery-status-with-the-ubuntu-sdk - nkcode
2个回答

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

2

虽然用户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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接