2016-06-19 33 views
0

Qtコードから 'part1_4_md'というシェルスクリプトファイルに文字列値を渡したいとします。Qtからシェルスクリプトファイルに引数を渡す

void MainWindow::on_pushButton_clicked() 
{ 

    QString path = ui->lineEdit->text(); 

    QProcess *process = new QProcess; 
    process->start("/bin/bash", QStringList() << "/home/kha/Unix/QT/part1_4_md"); 
    process->waitForBytesWritten(); 
    process->waitForFinished(); 

    QString output(process->readAllStandardOutput()); 
    ui->textEdit->setPlainText(output); 
    QTextCursor textCursor = ui->textEdit->textCursor(); 
    textCursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor, 1); 

} 

私はLINEEDITボックスを作成したときにそのボックス内の文字列値では、ユーザーのタイプとボタンを押して、私は私のシェルスクリプトファイルとに渡されるその値を必要とする:これはQtのからの私のコードがありますシェルスクリプトファイルは、その値を使用して実行します。これは私のシェルスクリプトファイルは次のようになります。

#!/bin/bash 

files=($*); 
dates=(); 

for ((i = 0; i<${#files[@]}; i++)) 
do 
    dates[$i]=$(date -r ${files[i]} +"%Y%m%d"); 

done 

文字列値が「ファイル」配列の引数として使用されるように「$の*」に渡すべきです。私にこれを行う方法を教えてください。

+3

http://doc.qt.io/qt-5/qprocess.html#setArgumentsを使用する必要があります.BTWでは、UIスレッドからQProcessを起動して待つべきではありません。それは間違いです。 – AlexanderVX

答えて

0

argumentsパラメータがQProcess::startで、すでに文字列リストの/bin/bashにスクリプトとして渡されています。より多くのパラメータをリストに追加することができ、bashはpathをスクリプトの最初の引数として解釈できるはずです。

QString path = ui->lineEdit->text(); 
QString script("/home/kha/Unix/QT/part1_4_md"); 
QProcess *process = new QProcess; 
process->start("/bin/bash", QStringList() << script << path); 

これが機能しない場合は、-c bashのオプションを使用できます。

QString path = ui->lineEdit->text(); 
QString script("/home/kha/Unix/QT/part1_4_md"); 
QString command_string = script + " " + path; 
QString c_option("-c"); 
QProcess *process = new QProcess; 
process->start("/bin/bash", QStringList() << c_option << command_string); 

GUIスレッドでプロセスを待つことでUIをブロックすることに注意してください。エラー信号と同様にfinishedreadyReadStandardOutputに接続して、プロセスを非同期に実行するか、別のスレッドで実行することができます。

関連する問題