2015-11-23 32 views

Trả lời

2

tôi giải quyết vấn đề của tôi sử dụng sau đoạn mã đơn giản

#include <QDir> 

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

Bạn đã cố gắng đọc phản hồi từ dấu nhắc lệnh là tốt? –

+0

Có nó hoạt động từ dấu nhắc lệnh cũng –

3

Hãy thử điều này:

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

Hoặc nếu bạn muốn làm điều đó trong một dòng, bạn có thể làm điều này (ở đây chúng tôi đang sử dụng startDetached thay vì start):

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

trong trường hợp thứ hai nó là tốt hơn để kiểm tra mã trả về (để hiển thị thông báo lỗi nếu chương trình của bạn không thể chạy chương trình bên ngoài). Ngoài ra bạn có thể đặt tất cả các đối số trong program chuỗi đầu tiên (tức process.start("git gui"); được phép quá):

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

Tôi đã thử tất cả những , nhưng vẫn GUI của tôi không bật lên. \t Quy trình QProcess; \t process.setWorkingDirectory ("D: \\ MyWork \\ Temp \\ source"); \t process.start ("git gui"); –

+0

1) Bạn có thể vui lòng kiểm tra lại, nhưng với đường dẫn đầy đủ đến git.exe? Một cái gì đó như 'QProcess :: startDetached (" C: \\ Users \\ \\ AppData \\ Địa phương \\ GitHub \\ PortableGit_ \\ bin \\ git.exe ", QStringList() <<" gui " , "D: \\ MyWork \\ Temp \\ nguồn"); '? (hãy đặt đường dẫn đúng!) 2) Cảm ơn bạn đã chỉ ra điều này, tôi đã sửa lỗi này. – Ilya

+0

Tôi đã thử rằng quá với đường dẫn chính xác của exe, vẫn không hoạt động của nó, không thể tìm ra lý do –

1

Thậm chí nếu bạn đang sử dụng Qt, bạn vẫn có thể gọi Windows API. ShellExecute sẽ làm công việc này

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

Và nếu charset của bạn là Unicode (Wide Char), hãy thử đoạn mã sau

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

Bạn không cần phải lo lắng về việc tách, Qt sẽ chăm sóc mà cho bạn.

Xem QDir Document

Bạn không cần phải sử dụng chức năng này để xây dựng đường dẫn tập tin. Nếu bạn luôn sử dụng "/", Qt sẽ dịch đường dẫn của bạn để phù hợp với hệ điều hành cơ bản . Nếu bạn muốn hiển thị đường dẫn tới người dùng bằng cách sử dụng dấu phân cách của hệ điều hành của họ choNativeSeparators().

Đối với QProcess, hãy thử cách này.

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

Thay vì sử dụng hệ thống() làm điều này, do đó bạn có thể ở lại trong khuôn khổ QT:

QDir::setCurrent("D:/MyWork/Temp/source"); 
myProcess.startDetached("git gui"); 
Các vấn đề liên quan