Dare a un figlio QProcess il suo ambiente proxy
Impostate l'ambiente passato a un figlio Qt conservando i valori ereditati che gli servono ancora.
Per un downloader avviato tramite QProcess, costruite l'ambiente del figlio prima di avviarlo:
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/"});Questo frammento Qt presuppone un oggetto padre esistente, un ciclo di eventi e curl disponibile per il figlio. Mantenete vivo il QProcess mentre è in esecuzione e gestite i suoi segnali di completamento ed errore nell'applicazione. Per questo controllo di un sito pubblico senza credenziali proxy configurate, la lista dei proxy HTTP offre endpoint HTTP candidati per il valore proxy del figlio.
Partire da systemEnvironment conserva i valori ereditati come PATH. Costruire un ambiente altrimenti vuoto e aggiungere una sola variabile proxy ometterebbe quelle altre voci.
Il nome della variabile è la chiave. export è un comando di shell, non fa parte di quella chiave e non è un eseguibile che QProcess debba avviare prima. Passare l'ambiente direttamente evita anche di costruire un comando di shell attorno all'URL.
setProcessEnvironment si applica al processo avviato dopo. Non cambia l'ambiente di un figlio già in esecuzione né quello della shell che ha avviato l'applicazione Qt.
Il downloader scelto deve comprendere la variabile. Questo esempio usa https_proxy in minuscolo per la richiesta HTTPS di curl e conserva gli input di bypass ereditati. Un altro programma figlio può avere un'altra interfaccia proxy.