我正在开发一个Qt项目,我希望动态设置工作目录以便程序在不同的系统上运行。
我附上了供您参考的代码。
QProcess Home;
Home.start("echo",QStringList() << "$HOME");
Home.waitForFinished(-1);
qDebug() << Home.readAllStandardOutput();
但qDebug()打印“$ HOME”而不是实际的主路径。为什么会发生?有没有其他的方式来做到这一点?
我正在开发一个Qt项目,我希望动态设置工作目录以便程序在不同的系统上运行。
我附上了供您参考的代码。
QProcess Home;
Home.start("echo",QStringList() << "$HOME");
Home.waitForFinished(-1);
qDebug() << Home.readAllStandardOutput();
但qDebug()打印“$ HOME”而不是实际的主路径。为什么会发生?有没有其他的方式来做到这一点?
您可以使用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();
}
您也可以使用'QDir :: homePath()'获取主路径。而'qgetenv'可以用来代替'std :: getenv'。 –
对于'QDir :: homePath()'+1。这也适用于Windows。 '$ HOME'是POSIX。 – MSalters
@Riateche,谢谢你真的帮助,但现在我有另一个问题。我可以访问$ HOME,但我无法访问其他用户定义的环境变量。如果你能帮助我解决这个问题,那会很棒。 –
这是另一种方法。
QStringList QProcess::systemEnvironment() [static]
http://qt-project.org/doc/qt-4.8/qprocess.html#systemEnvironment
QStringList environment = QProcess::systemEnvironment();
// environment = {"PATH=/usr/bin:/usr/local/bin",
// "USER=greg", "HOME=/home/greg"}
希望有所帮助。
QByteArray qgetenv (const char * varName)是QT库提供的用于在所有平台上获取任何环境变量的函数。
的getenv()似乎在Windows VS2005中被取消以后more info here
特别适合居家路径,你应该使用的QDir :: HOMEPATH()
谢谢,它确实有帮助,但现在我想访问用户定义的环境变量。 qgetenv没有给我答案。请帮助我。 –
为什么你认为它应该与实际的替代'$ HOME'家乡的道路? –
@CaptainObvlious:因为'system(“echo $ HOME”)'也是这样吗? – MSalters