【问题标题】:Qt 5 Write Linux SysFs Entry with QFile and QDataStreamQt 5 使用 QFile 和 QDataStream 编写 Linux SysFs 条目
【发布时间】:2016-01-14 21:13:22
【问题描述】:

我可以在命令行中以 root 身份 echo 100 > /sys/class/soft_pwm/pwm-35/duty_cycle,但我无法让我的 Qt 5 代码在以 root 身份运行时执行相同的操作。下面是代码 - 我做错了什么?谢谢。

/**
 * Set the PWM on the Red / Green LEDs
 * @param percent
 */
void LedController::setLedPwm(int percent) {

    // Cap the percent
    if ( percent > 90 ) {
        percent = 90;
    }
    if ( percent < 25 ) {
        percent = 25;
    }

    // Scale to usable percent
    percent = abs(percent - 100);

    QFile file1("/sys/class/soft_pwm/pwm-35/duty_cycle");
    if (!file1.open(QIODevice::WriteOnly | QIODevice::Text)) {
        qDebug() << "LedController: Cannot set LED PWM for Red/Green LEDs [ 35 ]...";
        return;
    }
    QDataStream in1(&file1);
    QString toWrite1 = QString("%1\n").arg(percent);
    qDebug() << "LedController: PWM Led [ 35 ]" << toWrite1;
    in1 << toWrite1;
    file1.close();

    QFile file2("/sys/class/soft_pwm/pwm-39/duty_cycle");
    if (!file2.open(QIODevice::WriteOnly | QIODevice::Text)) {
        qDebug() << "LedController: Cannot set LED PWM for Red/Green LEDs [ 39 ]...";
        return;
    }
    QDataStream in2(&file2);
    QString toWrite2 = QString("%1\n").arg(percent);
    qDebug() << "LedController: PWM Led [ 35 ]" << toWrite2;
    in2 << toWrite1;
    file2.close();

}

【问题讨论】:

  • 到底哪里失败了?
  • 尝试使用 strace 运行它。
  • 你得到的调试输出是什么?
  • 函数执行没有失败。我没有看到“无法设置 LED PWM”消息。问题是占空比文件的值没有改变。
  • 您要追加还是替换文件内容?

标签: linux qt qt5 qfile sysfs


【解决方案1】:

QDataStream 用于二进制数据存储。要写入文本值,请使用 QTextStream。

【讨论】: