getlogin() ще работи само на *NIX/Linux системи. Ако ползваш QT + MinGW (Windows), то горния код, например, няма да се компилира (за да се увериш, че нямаш дефинирана getlogin, то изпълни
FINDSTR /s /i getlogin C:\MinGW\*.h, където C:\MinGW е директорията ти с MinGW ).
Ако искаш да правиш мултиплатформено приложение (а точно в това е силата на QT), то търси
"QT начина" за решаването на дадения проблем или ползвай мултиплатформени библиотеки. Eдно просто решение на задачата за разбиране на името на текущия потребител само с QT е да се прочете каква стойност има променливата от средата
USERNAME.
(за информация, командата
su под Linux записва текущия потребител в USER, а не в USERNAME).
Примерен код |
#include <QtGui> //
int main(int argc, char ** argv) { QApplication app( argc, argv ); QStringList env = QProcess::systemEnvironment(); QString usr = QVariant(env.filter("USERNAME", Qt::CaseInsensitive )).toString(); usr.replace("USERNAME=", ""); //qDebug() << "USERNAME=" << usr;
QWidget *mainWin = new QWidget; QLineEdit *pathLine = new QLineEdit(mainWin); pathLine->setText(usr); mainWin->resize(400,400); mainWin->show(); app.connect( &app, SIGNAL( lastWindowClosed() ), &app, SLOT( quit() ) ); return app.exec(); };
|
Горното набързо надраскано примерче със сигурност работи върху Windows и Linux, за MAC не съм тествал. Можеш да разшириш примера, като тестваш каква е текущата платформа и изпълняваш съответния код, специфичен за нея (Q_WS_WIN, Q_WS_X11, Q_WS_MAC, ...)
Примерен код |
#ifdef Q_WS_X11 // Linux/BSD/*NIX ... #else ... #endif
|
Тогава можеш с QProcess да изпълниш външна команда, специфична за дадената ОС (като whoami в Linux например) и да прихванеш изхода от процеса/командата.
Успех!