2015-11-23 15 views

risposta

2

ho risolto il problema utilizzando seguente segmento di semplice codice

#include <QDir> 

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

Hai provato a leggere la risposta dal prompt dei comandi pure? –

+0

Sì, funziona anche dal prompt dei comandi –

3

Prova questa:

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

Oppure, se si vuole fare in una sola riga, si può fare questo (qui stiamo usando startDetached anziché start):

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

Nel secondo caso è meglio controllare il codice di ritorno (per mostrare un messaggio di errore se il tuo programma non può eseguire un programma esterno). Inoltre è possibile mettere tutti gli argomenti nella prima stringa program (vale a dire process.start("git gui"); è consentito troppo):

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

ho provato tutti questi , ma la mia GUI non appare. \t QProcesso processo; \t process.setWorkingDirectory ("D: \\ MyWork \\ Temp \\ origine"); \t process.start ("git gui"); –

+0

1) Potresti ricontrollare, ma con il percorso completo di git.exe? Qualcosa come 'QProcess :: startDetached (" C: \\ Users \\ \\ AppData \\ Local \\ GitHub \\ PortableGit_ \\ bin \\ git.exe ", QStringList() <<" gui " , "D: \\ MyWork \\ Temp \\ source"); '? (si prega di impostare il percorso corretto!) 2) Grazie per avermelo segnalato, ho corretto questo errore. – Ilya

+0

L'ho provato anche con i percorsi corretti dell'exe, ancora non funziona, non riesco a capire il motivo –

1

Anche se si sta utilizzando Qt, è comunque possibile chiamare API di Windows. ShellExecute farà questo lavoro

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

E se il set di caratteri è Unicode (Wide Char), prova a seguire il codice

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

Non è necessario preoccuparsi di separatore, Qt si prenderà cura di che per te.

Vedi QDir Document

Non è necessario utilizzare questa funzione per costruire percorsi di file. Se si utilizza sempre "/", Qt tradurrà i percorsi per conformarsi al sistema operativo sottostante . Se si desidera visualizzare i percorsi per l'utente utilizzando il separatore del loro sistema operativo utilizzare toNativeSeparators().

Per il tuo QProcess, prova questo.

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

Invece di utilizzare il sistema() esegue questa operazione in modo da poter rimanere nel quadro QT:

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