[英]Use system() with a variable in Qt
我想在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();
}
如果確實要使用外殼程序,請確保通過使用單獨的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());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.