2013-07-02 46 views
0

我正在开发一个Qt项目,我希望动态设置工作目录以便程序在不同的系统上运行。

我附上了供您参考的代码。

QProcess Home; 
Home.start("echo",QStringList() << "$HOME"); 
Home.waitForFinished(-1); 
qDebug() << Home.readAllStandardOutput(); 

但qDebug()打印“$ HOME”而不是实际的主路径。为什么会发生?有没有其他的方式来做到这一点?

+0

为什么你认为它应该与实际的替代'$ HOME'家乡的道路? –

+0

@CaptainObvlious:因为'system(“echo $ HOME”)'也是这样吗? – MSalters

回答

3

您可以使用std::getenv来检索进程环境中设置的主路径。

#include <cstdlib> 

const char *homePath = std::getenv("HOME"); 
if(homePath != NULL) 
{ 
    QProcess Home; 
    Home.start("echo",QStringList() << homePath); 
    Home.waitForFinished(-1); 
    qDebug() << Home.readAllStandardOutput(); 
} 
+2

您也可以使用'QDir :: homePath()'获取主路径。而'qgetenv'可以用来代替'std :: getenv'。 –

+0

对于'QDir :: homePath()'+1。这也适用于Windows。 '$ HOME'是POSIX。 – MSalters

+0

@Riateche,谢谢你真的帮助,但现在我有另一个问题。我可以访问$ HOME,但我无法访问其他用户定义的环境变量。如果你能帮助我解决这个问题,那会很棒。 –

0

特别适合居家路径,你应该使用的QDir :: HOMEPATH()

+0

谢谢,它确实有帮助,但现在我想访问用户定义的环境变量。 qgetenv没有给我答案。请帮助我。 –