2010-07-15 10 views
5

Nella mia applicazione GUI Qt, sto chiamando il prompt dei comandi tramite:Chiamata al prompt dei comandi dall'applicazione Qt senza blocco?

system("lots.exe & of.exe && commands.exe"); 

Si apre il prompt dei comandi (come voglio io), ma si blocca l'applicazione GUI Qt fino a quando chiudo il prompt dei comandi. C'è qualche modo per prevenire questo? Ho visto che esiste una classe QProcess, ma non riesco a farla visualizzare il prompt dei comandi.

Qualsiasi aiuto sarebbe molto apprezzato!

+0

"&&" funziona? Mi aspetto che non funzioni, in quanto dovrebbe essere la sintassi della shell (cmd.exe, bash, ecc.) E QProcess non la gestisce. EDIT: stupido, questo è ancora system() ... –

risposta

7

QProcess è davvero la risposta. Se vuoi usare qualcosa come system() devi mettere la chiamata in un'altra discussione o usare popen o qualcosa di simile per le tue piattaforme.

QProcess ha lo setReadChannel che è possibile utilizzare per visualizzare la finestra della propria console per mostrare l'output.

1

Hai solo bisogno di mettere quella chiamata di sistema in un thread separato.

+2

Non c'è bisogno di farlo quando QProcess è disponibile. Inoltre non ci sarebbe un buon modo per interrompere il thread mentre era bloccato in system(), il che potrebbe causare problemi se gli exe sottostanti non escono per molto tempo (o sempre) –

+0

Che è un problema generale con il sistema (), Sono d'accordo :) –

1

Se non è necessario alcuno degli output, il modo più semplice sarebbe utilizzare QProcess :: startDetached().

http://doc.qt.io/archives/4.6/qprocess.html#startDetached

Se avete bisogno l'uscita, QtConcurrent :: run con un futurewatcher contenente l'output sarebbe meno spese generali/lavoro di quanto derivante QThread.

Problemi correlati