在Qt中对变量使用system()

Use system() with a variable in Qt

本文关键字:system 变量 Qt      更新时间:2023-10-16

我想在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

任何想法?

首先,我将使用QFile进行这个写入操作。

如果你真的希望坚持当前的概念,我个人会使用两件事:

1) QString的arg()方法来创建字符串。

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

要避免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,请确保通过使用QByteArray的单独实例正确地转换为char*:

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

创建一个QString来保存命令:

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

则可以使用arg将%1替换为另一个值:

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