Я работаю над проектом 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 ()