使用 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);
}
我目前正在使用 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);
}