Ge ett QProcess-barn dess proxy-miljö
Ange miljön som skickas till ett Qt-barn och behåll de ärvda värden som det fortfarande behöver.
För en nedladdare som startas via QProcess bygger du barnets miljö innan den startas:
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/"});Den här Qt-biten förutsätter ett befintligt förälderobjekt, en händelseloop och curl tillgängligt för barnet. Håll QProcess vid liv medan den körs och hantera dess signaler för slutförande och fel i programmet. För den här kontrollen av en offentlig webbplats utan konfigurerade proxy-uppgifter erbjuder listan över HTTP-proxyer möjliga HTTP-slutpunkter för barnets proxyvärde.
Att börja med systemEnvironment bevarar ärvda värden som PATH. Att bygga en i övrigt tom miljö och lägga till en enda proxyvariabel skulle utelämna de andra posterna.
Variabelns namn är nyckeln. export är ett skalkommando, inte en del av den nyckeln och inte en körbar fil som QProcess måste starta först. Att skicka miljön direkt undviker också att bygga ett skalkommando runt URL:en.
setProcessEnvironment gäller processen som startas efteråt. Det ändrar inte miljön för ett barn som redan körs eller för skalet som startade Qt-programmet.
Den valda nedladdaren måste förstå variabeln. Det här exemplet använder små bokstäver i https_proxy för curls HTTPS-begäran och bevarar ärvda kringgåenden. Ett annat barnprogram kan ha ett annat proxygränssnitt.