2

Qt4には、新しく生成されたプロセスの環境変数を設定するためのQProcess :: setProcessEnvironment()があります。

ただし、QProcess :: startDetached()は静的メンバー関数であるため、setProcessEnvironment()は適用されません。Qtでデタッチされたプロセスの環境変数をどのように設定しますか?

4

3 に答える 3

3

これは既知の古いバグです:http://bugreports.qt-project.org/browse/QTBUG-2284startDetached独自の環境をサポートするには、関数をオーバーロードする必要があります。Qtソースを見て、その方法を確認してください:http ://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/io?h=5.5 (qprocess*ファイル)。

于 2010-11-24T13:30:26.453 に答える
1

この動作はで修正されましたQt 5.10.0。ただし、呼び出しの順序は重要なようです。次の例が機能します。

QProcess proc;
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
env.insert("var-name", "var-value");
proc.setProgram("program-path");
proc.setProcessEnvironment(env);
proc.startDetached();

これは機能しませんが

QProcess proc;
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
env.insert("var-name", "var-value");
proc.setProcessEnvironment(env);
proc.startDetached("program-path");
于 2019-08-07T10:00:19.373 に答える
0

今Qt5.5を使用して、この問題に遭遇します。

Win7の下で、以下のコードを使用、親プロセスで環境を設定、サブプロセスが環境を継承しているようです。確かではありませんが、私の場合はうまくいきました。

より良い解決策があることを願っています

QString oldPath = qgetenv( "Path" );
QByteArray newPath = ( QCoreApplication::applicationDirPath() + ";" + oldPath ).toLocal8Bit();
bool bSet = qputenv("Path", newPath);
if ( !bSet )
{
    qDebug()<<"Failed";
}
于 2015-10-13T07:14:00.797 に答える