Yes, you're reading all the standard output, but only one time. You need to connect the signal readyReadStandardOutput to a slot for using readAllStandardOutput.

Say the process you are running sends
"Blah blah blah blah blah
Blah blah blah blah blah
Blah blah blah blah blah
Blah blah blah blah blah
Blah blah blah blah blah"

to stdout. Your call to nh3d.readAllStandardOutput() picks it up, which is fine. But now say the process wants to say

"Blah blah blah blah blah" again and you are not checking to see if anything is there.

If you don't want to do signals and slots, and you don't need interactive use of the program until the other process finishes, you can use a blocking wait:

Qt Code:
  1. if (nh3d.state() ==0 )
  2. nh3d.start("c:\\winnt\\system32\\mem");
  3. else while (nh3d.state() == QProcess::Running)
  4. {
  5. if (nh3d.waitForReadyRead(MAXIMUM TIME IN MILLISECONDS YOU ARE WILLING TO WAIT FOR THE PROCESS TO SEND SOMETHING TO THE STREAM) == TRUE) dosomethingwiththedata;
  6. else
  7. decidewhattodoiftheprocessisn'tsendingyouanythingafteralongtime,likekillingitandexiting;
  8. }
To copy to clipboard, switch view to plain text mode 
Just make sure the while loop does not run forever . In this pseudocode, it probably would unless the program normally exits on its own.