2015-11-23 7 views
6

Ich muss den folgenden Befehl mit Qt ausführen, der das Git GUI-Fenster öffnet.Wie führe ich einen Windows cmd Befehl mit Qt?

D:\MyWork\Temp\source>git gui 

Wie kann ich das tun?

ich folgendes versucht, aber es hat nicht funktioniert:

QProcess process; 
process.start("git gui",QStringList() << "D:\MyWork\Temp\source>"); 

Antwort

2

ich mein Problem gelöst folgende einfache Code-Segment mit

#include <QDir> 

QDir::setCurrent("D:/MyWork/Temp/source"); 
system("git gui"); 
+0

Haben Sie versucht, Antwort von der Eingabeaufforderung auch? –

+0

Ja, es funktioniert auch von der Eingabeaufforderung –

3

Try this:

QProcess process; 
process.setWorkingDirectory("D:\\MyWork\\Temp\\source"); 
process.start("git", QStringList() << "gui"); 

Oder wenn Sie es in einer Zeile tun möchten, können Sie dies tun (hier wir verwenden startDetached statt start):

QProcess::startDetached("git", QStringList() << "gui", "D:\\MyWork\\Temp\\source"); 

im zweiten Fall ist es besser, zu prüfen, der Rückkehrcode (um eine Fehlermeldung anzuzeigen, wenn Ihr Programm kein externes Programm ausführen kann). Sie können auch alle Argumente in der ersten program Zeichenfolge gesetzt (das heißt process.start("git gui"); darf auch):

bool res = QProcess::startDetached("git gui", QStringList(), "D:\\MyWork\\Temp\\source"); 
if (!res) { 
    // show error message 
} 
+0

Ich habe versucht, alle diese , aber meine GUI erscheint immer noch nicht. \t QProzess-Prozess; \t process.setWorkingDirectory ("D: \\ MyWork \\ Temp \\ source"); \t process.start ("git gui"); –

+0

1) Könnten Sie es bitte noch einmal überprüfen, aber mit dem vollständigen Pfad zu git.exe? Etwas wie 'QProcess :: startDetached (" C: \\ Users \\ \\ AppData \\ Local \\ GitHub \\ PortableGit_ \\ bin \\ git.exe ", QStringList() <<" gui " , "D: \\ MyWork \\ Temp \\ Quelle"); '? (Bitte richtigen Pfad angeben!) 2) Danke, dass Sie auf diesen Fehler hingewiesen haben. – Ilya

+0

Ich habe das auch mit korrekten Pfaden der EXE versucht, immer noch nicht funktioniert, kann den Grund nicht herausfinden –

1

Auch wenn Sie Qt verwenden, können Sie immer noch Windows-API aufrufen. ShellExecute wird diesen Job

#include <Windows.h> 
ShellExecute(NULL, NULL, "git", "gui", NULL, SW_SHOWNORMAL); 

Und wenn Ihr charset ist Unicode (Wide Char), versuchen Sie folgenden Code

#include <Windows.h> 
ShellExecute(NULL, NULL, _T("git"), _T("gui"), NULL, SW_SHOWNORMAL); 
1

Sie brauchen sich nicht um den Separator zu sorgen, wird Qt darum kümmern für dich.

Siehe QDir Document

Sie brauchen nicht diese Funktion nutzen Dateipfade zu bauen. Wenn Sie immer "/" verwenden, übersetzt Qt Ihre Pfade so, dass sie dem zugrunde liegenden Betriebssystem entsprechen. Wenn Sie die Pfade zum Benutzer mithilfe des Trennzeichens ihres Betriebssystems anzeigen möchten, verwenden Sie NativeSeparators().

Für Ihre QProcess, versuchen Sie dies.

QProcess gitProcess; 
gitProcess.setWorkingDirectory("D:/MyWork/Temp/source"); 
gitProcess.setProgram("git"); // hope this is in your PATH 
gitProcess.setArguments(QStringList() << "gui"); 
gitProcess.start(); 
if (gitProcess.waitForStarted()) { 
    // Now your app is running. 
} 
0

Statt System() verwenden Sie diese so können Sie innerhalb des QT Rahmen bleiben:

QDir::setCurrent("D:/MyWork/Temp/source"); 
myProcess.startDetached("git gui");