2013-01-07 50 views

回答

19

Qt有一个围绕getenv()的包装,称为qgetenv()

QByteArray qgetenv (const char * varName) 

getenv()是一个标准的功能,但Visual Studio中已否决它这就是为什么Qt提供了qgetenv()包装。

请注意,如果您有兴趣参与标准的文件系统位置(如主目录,应用程序数据目录等),你应该使用QDesktopServices::storageLocation()(QT 4)或QStandardPaths::writableLocation()(QT 5)。

+0

这是一个扩展任何环境变量如%PATH%等的函数吗?例如,我在调用过程之前从命令行设置的自定义环境变量? – sashoalm

+1

@satuon编号它可以为用户的主目录和应用程序数据目录提供标准位置。和别的。自定义环境变量当然需要用getenv()来获取。 Qt不提取getenv(),因为它是所有标准C++编译器都可用的标准函数。 –

+0

实际上,有qgetenv:http://doc.qt.digia.com/qt/qtglobal.html#qgetenv因为:“引入了qgetenv(),因为标准C库中的getenv()在VC2005(及更高版本)。qgetenv()在VC中使用新的替换函数,并在所有其他平台上调用标准C库的实现。“ –

6

对于Qt,访问环境变量时也有一种“高级”方法。如果你的Qt应用程序在QCoreApplication中运行,这只适用于大多数Qt应用程序。

在这种情况下,您可以使用QProcessEnvironment,Qt版本至少为4.6。您可以通过使用

QProcessEnvironment::systemEnvironment(); 

访问当前进程的环境,你可以通过

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

查询任何变量这应该是更方便的使用在大多数情况下GETENV/qgetenv方法,因为这种阴影操作以更通用的方式实现系统实现,恕我直言,它也是一种更“Qt-like”的方法。

+0

另外,与'getenv'不同,它支持正确的包含Unicode字符的环境变量。 –