我想在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
有什么想法吗?
答案 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());