在Qt中使用带有变量的system()

时间:2014-05-23 12:28:47

标签: c++ linux qt system qstring

我想在Qt中运行系统命令,例如:

system("echo 50 > //sys//class//pwm-sunxi//pwm0//duty_percent")

现在问题是,我想从上面的代码中使用50的变量,以便我可以使用滑块来更改值

如果有任何帮助,我在Cubieboard A20上运行 Linux Debian 发行版

我尝试过使用

system("echo "INTtoString(variable)" > //sys//class//pwm-sunxi//pwm0//duty_percent")

但它显示错误

)

之前预计INTtoString

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

首先,我会使用QFile进行此写操作。

如果你真的希望坚持现有的概念,我会亲自使用两件事:

1)QString's arg() method创建字符串。

2)qPrintable(myQString)让const char *返回执行。

所以,我会写这样的东西:

QString myString = QString("echo %1 > /sys/class/pwm-sunxi/pwm0/duty_percent").arg(INTtoString(variable));
system(qPrintable(myString));

但实际上,这是一个更好的方法:

QFile file("/sys/class/pwm-sunxi/pwm0/duty_percent");
if (file.open(QIODevice::WriteOnly | QIODevice::Text
              | QIODevice::Truncate | QIODevice::Unbuffered))
    if (file.write(INTtoString(variable)) != 2)
        qDebug() << "Failed to write all:" << file.errorString();
else
    qDebug() << "Failed to open:" << file.errorString();
// No need to close as it will be done automatically by the RAII feature

请注意,双正斜杠是多余的。

答案 1 :(得分:2)

要避免shell调用,只需使用QFile

void change_duty_percent(int value)
{
  QFile duty_pc("/sys/class/pwm-sunxi/pwm0/duty_percent");
  duty_pc.open(QIODevice::WriteOnly | QIODevice::Truncate);
  duty_pc.write(QString::number(value));
  duty_pc.close();
}

如果您确实要使用shell,请务必使用char*的单独实例正确转换为QByteArray

QString command = QString("echo %1 > /sys/class/pwm-sunxi/pwm0/duty_percent").arg(value);
QByteArray commandBA(command.toLocal8Bit());
system(commandBA.data());

答案 2 :(得分:1)

创建一个QString来保存命令:

QString command = QString("echo %1 > //sys//class//pwm-sunxi//pwm0//duty_percent");

然后您可以使用arg将%1替换为其他值:

system(command.arg(50).toLocal8Bit().constData());