簡體   English   中英

在Qt中將system()與變量一起使用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM