QProcess
次のように使用して Microsoft Word を起動しようとしています。
QString program = "WINWORD.EXE";
process->start(program);
しかし、何も起こりません。
winword.exe
パス上にあります(したがって、winword.exeと入力すると単語が開きます)。そうするのは正しい方法ですか?
以下のコードがあなたを助けるかもしれません:
QProcess *process = new QProcess(this);
QString program = "explorer.exe";
QString folder = "C:\\";
process->start(program, QStringList() << folder);
グローバル $PATH ウィンドウ変数に含まれていないプログラムを実行しようとしていると思います。そのため、winword.exe は実行されません。
また、プログラムへの絶対パスを定義する必要がある場合もあります。たとえば、次のようになります。
QString wordPath = "C:\\Program Files\\Microsoft Office\\Office12\\WINWORD.EXE"
process->start(wordPath, QStringList() << "");
私にとっては、 " 文字を追加する必要があります:
m_process->start("\"C:\\Program Files (x86)\\Notepad++\\notepad++.exe\"");
Qtのドキュメントから:
注: プロセスは非同期で開始されます。つまり、started() シグナルと error() シグナルが遅延する可能性があります。waitForStarted() を呼び出して、プロセスが開始されたこと (または開始に失敗したこと) と、それらのシグナルが発行されたことを確認します。
ドキュメントに記載されている信号を GUI コントロールまたはデバッグ出力に接続し、何が起こるかを確認します。エラーが発生した場合は、QProcess::error() を使用してエラーの種類を確認する必要があります。
外部プロセスを起動しようとしているメソッドが、コードの直後に終了した場合、たとえば:
void foo() {
...
QString program = "WINWORD.EXE";
process->start(program);
}
および変数
process
ローカル変数として宣言された場合、メソッドの最後で破棄され、外部プロセスは開始されません。または、開始直後に破棄されるため、正しく表示されません。
私の場合、それが同様の問題の理由でした。それが役に立てば幸い。
作業ディレクトリを設定するだけです:
myProcess = new QProcess();
myProcess->setWorkingDirectory("C:\\Z-Programming_Source\\Java-workspace\\Encrypt1\\bin\\");
または開始時にそれを行います:
myProcess->start("dir \"My Documents\"");
start() で、コンソールのコマンドを入力できます... マニュアルを読んでください。
私は最初のオプションを好みます。より読みやすく。