27

QT-Programm から外部プログラムを開始したいと考えています。唯一の有効な解決策は次のとおりです。

system("start explorer.exe");

しかし、それはWindowsでのみ機能しており、コマンドラインを一瞬起動します。

次に試したのは:

QProcess process;
QString file = QDir::homepath + "file.exe";
process.start(file);
//process.execute(file); //i tried as well

しかし、何も起こりませんでした。何か案は?

4

4 に答える 4

31

オブジェクトがスタック上の変数 (メソッド内など) である場合、メソッドが終了すると、process既に開始したプロセスが のデストラクタで強制終了されるため、コードは期待どおりに動作しません。QProcess

void MyClass::myMethod()
{
    QProcess process;
    QString file = QDir::homepath + "file.exe";
    process.start(file);
}

QProcess代わりに、次のようにオブジェクトをヒープに割り当てる必要があります。

QProcess *process = new QProcess(this);
QString file = QDir::homepath + "/file.exe";
process->start(file);
于 2013-10-18T06:20:10.600 に答える
5

QDir::homePath がセパレーターで終わっていません。exeへの有効なパス

QString file = QDir::homePath + QDir::separator + "file.exe";
于 2013-10-18T06:00:14.037 に答える
5

使用するだけQProcess::startDetachedです。それは静的であり、終了するのを待ったり、ヒープに何かを割り当てたりすることについて心配する必要はありません。

QProcess::startDetached(QDir::homepath + "/file.exe");

の切り離された対応物QProcess::executeです。

5.15 の時点で、そのフォームは廃止されています (ただし、まだ存在しています)。新しい優先呼び出しは上記と同じですがQStringList、2 番目のパラメーターとしてコマンド ライン引数の a を使用します。渡す引数がない場合は、空のリストを渡すだけです。

于 2019-07-27T15:29:36.960 に答える