2017-12-27 7 views
1

Im Qt-Framework soll es möglich sein, mit QProcess eine andere .exe zu öffnen. Die folgende funktioniert nicht, wenn ich auf eine Schaltfläche klicken und der Rückruf aufgerufen wird:Warum kann ich mit dieser Funktion keinen anderen Prozess im Qt-Framework öffnen?

void MainWindow::on_pushButton_clicked() 
{ 
    QProcess *process = new QProcess(this); 
    QString wordPath = "C:/Program Files/Internet Explorer/iexplore.exe"; 

    process->start(wordPath); 
} 

Allerdings, wenn ich prozess- ändern> starten (wordPath) zu:

process->start(wordPath, QStringList()); 

, die eine Überlastung der ist gleiche Funktion, es funktioniert. Der zweite Parameter soll die Argumente sein, die an den neuen Prozess übergeben werden, den Sie starten möchten. Der einzige Weg, wie ich die Single-Argument-Version arbeiten kann, ist scheinbar, wenn sich etwas in meiner PATH-Variable befindet, weil sowohl "explorer.exe" als auch "msconfig" funktionieren. Was ist die Geschichte dahinter, nur mit der zweiten QStringList() arbeiten, die nur eine leere Liste ist?

In einem anderen SO Frage ich sah ein Benutzer speziell eine leere Zeichenfolge, wie folgt hinzufügen:

QString wordPath = "C:\\Program Files\\Microsoft Office\\Office12\\WINWORD.EXE" 
process->start(wordPath, QStringList() << ""); 

Ich würde gerne wissen, was der Grund dafür ist.

Antwort

5

Ihr Pfad "C:/Programme/Internet Explorer/iexplore.exe" enthält Leerzeichen. Wenn Sie also die erste Version verwenden, wird das Programm mit den Argumenten "Files/Internet" und "C:/Program" interpretiert "Explorer/iexplore.exe". Die zweite Version behandelt das erste Argument als das Programm und die QStringList als Argumente.

+0

Danke. Also, obwohl es eine spezifische überladene Funktion gibt, um zusätzliche Argumente zu nehmen, wird der einzelne Parameter alles nach den Leerzeichen-Parameter-Argumenten für den neuen Prozess berücksichtigen, den Sie starten? – Zebrafish

+1

Ja. Es benötigt eine vollständige Befehlszeile, nicht den Namen der ausführbaren Datei. Siehe [docs] (http://doc.qt.io/qt-5/qprocess.html#start-1). Sie raten sogar ausdrücklich von dieser Funktion ab und stellen ein Präprozessor-Makro zur Verfügung, um ihre Verwendung gänzlich zu verbieten. – Thomas

1

Von der Qt-Dokumentation:

Räume Argumente enthalten, müssen ordnungsgemäß an den neuen Prozess geliefert zitiert werden.

Versuchen QString wordPath = "\"C:/Program Files/Internet Explorer/iexplore.exe\"";

Verwandte Themen