2013-01-07 18 views

risposta

19

Qt ha un wrapper getenv(), chiamato qgetenv().

QByteArray qgetenv (const char * varName) 

getenv() è una funzione standard, ma Visual Studio ha deprecato che è per questo che Qt fornisce il qgetenv() involucro.

Si noti che se si è interessati a ottenere posizioni standard del file system (come la directory home, la directory dei dati dell'applicazione, ecc.) Si dovrebbe invece usare QDesktopServices::storageLocation() (Qt 4) o QStandardPaths::writableLocation() (Qt 5).

+0

Si tratta di una funzione che si espande ogni variabile d'ambiente, come% PATH%, ecc? Ad esempio, una variabile di ambiente personalizzata che ho impostato dalla riga di comando prima di richiamare il mio processo? – sashoalm

+1

@satuon No. si ottiene posizioni standard come la directory home dell'utente e la directory dei dati dell'applicazione. E altri. Le variabili di ambiente personalizzate dovranno ovviamente essere recuperate con getenv(). Qt non astratta getenv(), poiché è una funzione standard disponibile su tutti i compilatori C++ standard. –

+0

In realtà, c'è qgetenv: http://doc.qt.digia.com/qt/qtglobal.html#qgetenv Perché: "qgetenv() è stato introdotto perché getenv() dalla libreria C standard è stato deprecato in VC2005 (e versioni successive qgetenv() usa la nuova funzione di sostituzione in VC e richiama l'implementazione della libreria C standard su tutte le altre piattaforme. " –

6

per Qt, v'è anche un approccio "di alto livello" quando si accede a variabili d'ambiente. Funziona solo se l'applicazione Qt viene eseguita all'interno di un'applicazione QCore, che dovrebbe essere il caso per la maggior parte delle applicazioni Qt.

In tal caso, è possibile utilizzare QProcessEnvironment, per le versioni di Qt di almeno 4,6. È possibile accedere all'ambiente processo corrente utilizzando

QProcessEnvironment::systemEnvironment(); 

e si può interrogare qualsiasi variabile tramite

QProcessEnvironment::systemEnvironment().value("<variablename>", "<defaultvalue>"); 

Questo dovrebbe essere più conveniente che utilizzando l'approccio getenv/qgetenv nella maggior parte dei casi come questo ombre il funzionamento -la implementazione del sistema in un modo più generico e IMHO è anche un approccio più "Qt-simile".

+0

Inoltre, a differenza di 'getenv' supporta correttamente le variabili di ambiente contenenti caratteri Unicode. –

Problemi correlati