Til en downloader, der startes via QProcess, skal du opbygge barnets omgivelse, før den startes:

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/"});

Dette Qt-uddrag forudsætter et eksisterende forældreobjekt, en hændelsesløkke og curl tilgængelig for barnet. Hold QProcess i live, mens den kører, og håndtér dens færdig- og fejlsignaler i programmet. Til denne kontrol af et offentligt websted uden konfigurerede proxy-legitimationsoplysninger tilbyder listen over HTTP-proxyer mulige HTTP-endpoints til barnets proxyværdi.

At starte med systemEnvironment bevarer nedarvede værdier som PATH. At bygge en ellers tom omgivelse og tilføje én proxy-variabel ville udelade disse andre poster.

Variabelnavnet er nøglen. export er en shell-kommando, ikke en del af den nøgle og ikke et program, som QProcess skal starte først. At sende omgivelsen direkte undgår også at bygge en shell-kommando omkring URL'en.

setProcessEnvironment gælder for den proces, der startes bagefter. Den ændrer ikke omgivelsen for et barn, der allerede kører, eller for det shell, der startede Qt-programmet.

Den valgte downloader skal forstå variablen. Dette eksempel bruger små bogstaver i https_proxy til curls HTTPS-anmodning og bevarer nedarvede omgåelsesinput. Et andet barneprogram kan have en anden proxygrænseflade.

Relaterede artikler