我正在开发一个 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();
}
这是另一种方法。
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 上已被弃用,更多信息在这里
特别是对于主路径,您应该使用 QDir::homePath()