QProcess 経由で起動するダウンローダーでは、起動前に子プロセスの環境を組み立てます。

auto* download = new QProcess(parent);
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
env.insert("https_proxy", "http://proxy.example:8080");
download->setProcessEnvironment(env);
download->start("curl", {"--head", "https://www.example.com/"});

この Qt の断片は、既存の親オブジェクト、イベントループ、子プロセスから利用できる curl を前提としています。実行中は QProcess を生かしたままにし、完了とエラーのシグナルをアプリケーション側で処理します。プロキシ資格情報を設定しないこの公開サイト確認では、HTTPプロキシ一覧 が子プロセスのプロキシ値の候補となる HTTP エンドポイントを提供します。

systemEnvironment から始めれば PATH などの継承値が保たれます。そうではなく空の環境を構築してプロキシ変数をひとつ足すと、それらの項目が落ちてしまいます。

鍵になるのは変数名です。export はシェルのコマンドであり、その鍵の一部でも、QProcess が先に起動すべき実行ファイルでもありません。環境を直接渡せば、URL を囲むシェルコマンドを組み立てる必要もありません。

setProcessEnvironment はその後に起動するプロセスに適用されます。すでに動いている子プロセスや、Qt アプリケーションを起動したシェルの環境は変わりません。

選んだダウンローダーがこの変数を解釈できる必要があります。この例では curl の HTTPS リクエスト のために小文字の https_proxy を使い、継承されたバイパス入力を保ちます。別の子プログラムは別のプロキシ接口を持ちえます。

関連記事