【Qt】获取当前系统用户名:9种获取方式

目的

有时,在项目开发中,需要显示或者用到当前系统用户名信息。以下是几种获取系统用户名解决方案:

解决方案

1. 使用QDir::home()

cpp 复制代码
#include <QApplication>
#include <QDir>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QDir dir;
    QString userName = dir.home().dirName();
    qDebug().noquote() << userName;
    return a.exec();
}

2. 使用QProcessEnvironment

cpp 复制代码
#include <QApplication>
#include <QDebug>
#include <QProcessEnvironment>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
    // qDebug().noquote() << env.value("USER"); // Linux
    qDebug().noquote() << env.value("USERNAME"); // Windows
    return a.exec();
}

3. 使用QProcess

cpp 复制代码
#include <QApplication>
#include <QDebug>
#include <QProcess>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QStringList env = QProcess::systemEnvironment();
    // foreach(QString envs, env){
    //     qDebug() << envs; // 输出所有系统配置
    int index = env.indexOf(QRegExp("USERNAME.*")); // 正则表达式,模糊匹配
    QString userName = env.at(index); // 字符串: "USERNAME=admin"
    // userName.remove(0,9); // 删去从首个字符开始的9个字符即"USERNAME="
    userName.remove("USERNAME=");
    qDebug().noquote() << userName;
    // }

    return a.exec();
}

4. 使用QHostInfo::localHostName(),建议这个

在.pro中配置

cpp 复制代码
QT       += network
cpp 复制代码
#include <QApplication>
#include <QDebug>
#include <QHostInfo>

int main(int argc ,char* argv[])
{
	QApplication a(argc, argv);
    QString machineName = QHostInfo::localHostName();
    qDebug().noquote() << machineName;
    return a.exec();
}

5. 使用qgetenvgetenv

cpp 复制代码
#include <QApplication>
#include <QDebug>

int main(int argc ,char* argv[])
{
    QApplication a(argc, argv);
    // 可以使用qgetenv代替getenv

    // for MAc or Linux
    qDebug().noquote() << qgetenv("USER");
    // for windows
    qDebug().noquote() << getenv("USERNAME");

    return a.exec();
}

6. 使用QStandardPaths::standardLocations

cpp 复制代码
#include <QStandardPaths>
#include <QStringList>
#include <QDebug>

int main()
{
    QStringList homePath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation);
    qDebug() << homePath.first().split('/').last();
    return 0;
}

7. 使用GetUserName

cpp 复制代码
#include <QDebug>
#include <Windows.h>
#include <iostream>

#define UNLEN 128

int main() {
    TCHAR username[UNLEN + 1]; // 定义一个足够大的缓冲区来存储用户名
    DWORD usernameLength = UNLEN + 1; // 指定缓冲区的大小

    if (GetUserName(username, &usernameLength)) {
        std::wcout << L"当前系统用户名: " << username << std::endl; // 输出用户名
    } else {
        std::cout << "获取用户名失败,错误代码: " << GetLastError() << std::endl; // 输出错误信息
    }

    return 0;
}

8. 获取Linux系统用户名

cpp 复制代码
#include <QCoreApplication>
#include <QProcess>
#include <QDebug>
#include <windows.h>
#include <iostream>

#define MAX_USERNAME 128

int main(int argc, char **argv)
{
// Strictly pseudo code!
#ifdef Q_OS_WIN
    wchar_t acUserName[MAX_USERNAME];
    DWORD nUserName = sizeof(acUserName);
    if (GetUserName(acUserName, &nUserName))
        std::cout << acUserName << std::endl;
    else {
        qDebug().noquote() << "aaa";
    }
        // 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
}

9. 使用命令获取Windows或Linux系统用户名

cpp 复制代码
#include <QCoreApplication>
#include <QProcess>
#include <QDebug>

QString getSystemUsername()
{
    QString username;
    #ifdef Q_OS_WIN
        QProcess process;
        process.start("cmd.exe", QStringList() << "/c" << "echo %username%");
        process.waitForFinished();
        username = QString::fromLocal8Bit(process.readAllStandardOutput().trimmed());
    #elif defined(Q_OS_LINUX) || defined(Q_OS_MACOS)
        QProcess process;
        process.start("whoami");
        process.waitForFinished();
        username = QString::fromLocal8Bit(process.readAllStandardOutput()).trimmed();
    #endif
    return username;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QString username = getSystemUsername();
    qDebug() << "当前系统用户名:" << username;
    return a.exec();
}
相关推荐
m0_748708051 天前
C++中的观察者模式实战
开发语言·c++·算法
qq_537562671 天前
跨语言调用C++接口
开发语言·c++·算法
wjs20241 天前
DOM CDATA
开发语言
Tingjct1 天前
【初阶数据结构-二叉树】
c语言·开发语言·数据结构·算法
猷咪1 天前
C++基础
开发语言·c++
IT·小灰灰1 天前
30行PHP,利用硅基流动API,网页客服瞬间上线
开发语言·人工智能·aigc·php
快点好好学习吧1 天前
phpize 依赖 php-config 获取 PHP 信息的庖丁解牛
android·开发语言·php
秦老师Q1 天前
php入门教程(超详细,一篇就够了!!!)
开发语言·mysql·php·db
烟锁池塘柳01 天前
解决Google Scholar “We‘re sorry... but your computer or network may be sending automated queries.”的问题
开发语言
是誰萆微了承諾1 天前
php 对接deepseek
android·开发语言·php