Qt : QProcess in a Loop

Qt : QProcess in a Loop

From my last post, I create a program how to use QProcess in our program. Now, I try to write a method how Qt : QProcess in a loop method. This problem show when I try to use QProcess in a loop. I have list of command line program (running from bash or konsole) and I want to running that all list command from Qt.

We can solve Qt : QProcess in loop problem with use void QProcess::finished ( int exitCode, QProcess::ExitStatus exitStatus )   [signal]. This signal is emitted when the process finishes. exitCode is the exit code of the process, and exitStatus is the exit status. After the process has finished. You can read the complete description from this function at Qt Documentation. This is my screenshot of simple program Qt : QProcess in a loop :

QProcess in a Loop
QProcess in a Loop


This is description from Qt : QProcess in a loop program above. From the left listbox, I have some of extension of file (*.so, *.a, etc). From this program, I use find command(linux find command) at location “/usr” with parameter :

find /usr -name extension_from_list_1_to_end -print

Output text from this program will show in textEdit (widget at right location). This is my void QProcess::finished function to solve Qt : QProcess in a loop problem :

//this function will executed at the end of every process
void Qt_Loop_QProcess::finishedProcess ( int exitCode, QProcess::ExitStatus exitStatus )
{
	ui.textReport->append("complete"); //finishid process command

    if(idxProcess<nExtension) //run qprocess again until all extension finished
    {
    	ui.listCommand->setCurrentRow(idxProcess);

    	/* create QProcess object */
    	proc= new QProcess();
    	QString strCommand = setCommand(listExtension.at(idxProcess));
    	proc->start("/bin/bash", QStringList() << "-c" << strCommand);

    	/* show output */
    	connect(proc, SIGNAL(readyReadStandardOutput()),this, SLOT(rightMessage()) );
    	connect(proc, SIGNAL(readyReadStandardError()), this, SLOT(wrongMessage()) );
    	connect(proc, SIGNAL(finished(int, QProcess::ExitStatus)),
    			this, SLOT(finishedProcess(int, QProcess::ExitStatus)) );

    	idxProcess++;
    }
}

This Qt : QProcess in a loop program will process every extension at left location until all extension processed. You can get information processes that are running from selected item at listwidget (left widget position). This is a output from Qt : QProcess in a loop program when we press QProcess Loop button :

Running Qt QProcess in a Loop
Running Qt QProcess in a Loop

You can download the complete Qt : QProcess in a loop source code at here.

4 Comments

Add a Comment

Your email address will not be published. Required fields are marked *