2016-06-19 2 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를 사용해야하며 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 옵션을 사용할 수 있습니다.

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에 연결하여 프로세스를 비동기 적으로 실행하거나 별도의 스레드에서 실행할 수 있습니다.