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

问题描述 投票:5回答:2

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

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

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

c++ linux qt ubuntu battery
2个回答
2
投票

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

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


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);
}
© www.soinside.com 2019 - 2024. All rights reserved.