2011-05-28 5 views
0

Je travaille sur l'exécution d'un processus à partir de mon application Windows, le processus est le fichier console exe. J'utilise le code suivant:Comment démarrer un processus de console

void compilerWindow::runClicked() 
{ 
    proc = new QProcess(this); 
    QString name = "C:\\qtEcoolCompiler\\qt\\vm.exe"; 

    QStringList args = QStringList() << "codeGeneration.vm"; 

    connect(proc, SIGNAL(readyRead()), 
        SLOT(readFromProc())); 
    connect(proc, SIGNAL(error(QProcess::ProcessError)), 
        SLOT(procError(QProcess::ProcessError))); 
    connect(proc, SIGNAL(finished(int)), 
        SLOT(procFinished())); 

    outputBrowser->clear(); 
    outputBrowser->append("Begining Of Execution"); 

    proc->start(name, args); 
    proc->waitForFinished(); 
} 

Mais le problème est la console n'apparaît pas (pas d'ouverture) et la procFinished() sera appelée et la console ne se ouvre pas jusque-là.

Que dois-je faire?

Répondre

0

essayez la fonction system(); il exécutera les commandes comme si elle est exécutée à partir de Windows cmd

0

Tout d'abord The console won't open with QProcess in windows

Note: Windows intentionally suppresses output from GUI-only applications to 
inherited consoles. This does not apply to output redirected to files or 
pipes. To forward the output of` GUI-only applications on the console 
nonetheless, you must use SeparateChannels and do the forwarding yourself 
by reading the output and writing it to the appropriate output channels. 

Vous devriez lire les processus StdOut avec readAllStandardOutput() ou ReadChannel() ou l'une des autres fonctions fournies. Je n'ai aucune idée de ce que vm.exe fait, mais en supposant que le chemin est correct et procError (int) n'est jamais appelé .... le processus est en cours d'exécution et se termine correctement.

Si vous souhaitez utiliser le Readyread() signal, vous devez set the read channel. Mais je suggère d'utiliser le signal readyReadStandardOutput() à la place.

Questions connexes