lpa*_*app 40
我实际上是在几天前考虑过这个问题,而且我得出了不同的选择,每个都有自己的权衡,即:
该解决方案的优点在于它非常容易实现.缺点是如果将环境变量设置为其他内容,则此解决方案完全不可靠.
#include <QString>
#include <QDebug>
int main()
{
QString name = qgetenv("USER");
if (name.isEmpty())
name = qgetenv("USERNAME");
qDebug() << name;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
优点是,它实现起来相对容易,但是再一次,它很容易变得不可靠,因为在用户归属位置使用不同的用户名和"条目"是有效的.
#include <QStandardPaths>
#include <QStringList>
#include <QDebug>
#include <QDir>
int main()
{
QStringList homePath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation);
qDebug() << homePath.first().split(QDir::separator()).last();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这可能是最难实现的,但另一方面,这似乎是最可靠的,因为它不能像应用环境变量或家庭位置技巧那样容易在应用程序下更改.在Linux上,您将使用QProcess来调用通常的whoami命令,而在Windows上,您将使用GetUserName WinAPI来实现此目的.
#include <QCoreApplication>
#include <QProcess>
#include <QDebug>
int main(int argc, char **argv)
{
// Strictly pseudo code!
#ifdef Q_OS_WIN
char acUserName[MAX_USERNAME];
DWORD nUserName = sizeof(acUserName);
if (GetUserName(acUserName, &nUserName))
qDebug << acUserName;
return 0;
#elif Q_OS_UNIX
QCoreApplication coreApplication(argc, argv);
QProcess process;
QObject::connect(&process, &QProcess::finished, [&coreApplication, &process](int exitCode, QProcess::ExitStatus exitStatus) {
qDebug() << process.readAllStandardOutput();
coreApplication.quit();
});
process.start("whoami");
return coreApplication.exec();
#endif
}
Run Code Online (Sandbox Code Playgroud)
总结:我个人会选择最后一个版本,因为即使它是最难实现的,也是最可靠的.
无法使用Qt获取当前用户名。
但是,您可以阅读以下链接:
http://www.qtcentre.org/threads/12965-获取用户名 http://qt-project.org/forums/viewthread/11951
我认为最好的方法是:
#include <stdlib.h>
getenv("USER"); ///for MAc or Linux
getenv("USERNAME"); //for windows
Run Code Online (Sandbox Code Playgroud)
编辑:您可以使用qgetenv代替getenv。