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

目的

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

解决方案

1. 使用QDir::home()

#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

#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

#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中配置

QT       += network
#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

#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

#include <QStandardPaths>
#include <QStringList>
#include <QDebug>

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

7. 使用GetUserName

#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系统用户名

#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系统用户名

#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();
}
  • 15
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Qt C++ 程序中获取当前使用的数据库版本可以通过 `QSqlDatabase` 和 `QSqlDriver` 类完成。具体步骤如下: 1. 通过 `QSqlDatabase::addDatabase()` 方法创建一个 `QSqlDatabase` 对象,并设置数据库连接信息,如下: ```cpp QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("localhost"); db.setDatabaseName("mydatabase"); db.setUserName("root"); db.setPassword("password"); ``` 需要根据实际情况修改数据库类型、主机名、数据库名、用户名、密码等信息。 2. 调用 `QSqlDatabase::open()` 方法打开数据库连接,如下: ```cpp if (db.open()) { // 数据库连接成功 } else { // 数据库连接失败 } ``` 3. 获取当前使用的数据库版本的主版本号和次版本号,如下: ```cpp QSqlDriver *driver = db.driver(); qDebug() << "Database version: " << driver->majorVersion() << '.' << driver->minorVersion(); ``` 完整示例代码如下: ```cpp #include <QSqlDatabase> #include <QSqlDriver> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 创建数据库连接 QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("localhost"); db.setDatabaseName("mydatabase"); db.setUserName("root"); db.setPassword("password"); // 打开数据库连接 if (db.open()) { // 获取数据库版本 QSqlDriver *driver = db.driver(); qDebug() << "Database version: " << driver->majorVersion() << '.' << driver->minorVersion(); } else { qDebug() << "Unable to connect to the database."; } return a.exec(); } ``` 注意:上面的示例代码使用的是 MySQL 数据库,如果你使用的是其他数据库,需要将 `QMYSQL` 替换为相应的数据库驱动名称。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FreeLikeTheWind.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值