2017-12-27 31 views
1

Qtフレームワークでは、QProcessを使用して別の.exeを開くことができるはずです。以下は、私がボタンをクリックしたときに動作しないと、コールバックが呼び出されます。Qtフレームワークで別のプロセスをこの関数で開くことができないのはなぜですか?

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

    process->start(wordPath); 
} 

しかし私はPROCESS->スタート(wordPath)を変更した場合:

の過負荷である
process->start(wordPath, QStringList()); 

同じ機能、それは動作します。 2番目のパラメータは、開始したい新しいプロセスに渡される引数であると考えられます。私が "explorer.exe"と "msconfig"の両方が働いているので、私がPATH変数に何かがある場合は、単一引数バージョンを動作させる唯一の方法があります。この背後にある物語は、単に空のリストである2番目のQStringList()でのみ動作しますか?

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

私は理由は、この背後にあるものを知っているのが大好きだ:私は、ユーザーが、特にこのような空の文字列を、追加しました別のSOの質問で

答えて

5

あなたのパス「C:/ Program Files/Internet Explorer/iexplore.exe」には空白が含まれているため、最初のバージョンを使用するとプログラムは "Files/Internet"引数を持つ "C:/ Program" "Explorer/iexplore.exe"。 2番目のバージョンは、すべての最初の引数をプログラムとして、QStringListを引数として扱います。 Qtのドキュメントから

+0

を試してみてください。だから、余分な引数を取る特定のオーバーロードされた関数があるにもかかわらず、単一のパラメータは、あなたが開始する新しいプロセスへのスペースパラメータ引数の後に何かを考慮するでしょうか? – Zebrafish

+1

はい。実行可能ファイルの名前ではなく完全なコマンドラインが必要です。 [docs](http://doc.qt.io/qt-5/qprocess.html#start-1)を参照してください。それらは、この関数に対して特に助言し、その使用を完全に禁止するプリプロセッサマクロを提供します。 – Thomas

1

:スペースを含む

引数は正しく、新しいプロセスに供給されるように引用符で囲む必要があります。

はありがとう QString wordPath = "\"C:/Program Files/Internet Explorer/iexplore.exe\"";

関連する問題