【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"); // LinuxqDebug().noquote() << env.value("USERNAME"); // Windowsreturn 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 LinuxqDebug().noquote() << qgetenv("USER");// for windowsqDebug().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 128int 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 128int main(int argc, char **argv)
{
// Strictly pseudo code!
#ifdef Q_OS_WINwchar_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_UNIXQCoreApplication 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_WINQProcess 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();#endifreturn username;
}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QString username = getSystemUsername();qDebug() << "当前系统用户名:" << username;return a.exec();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/175553.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网工笔记(五):HTTP协议

当工作中遇到关于网络7层协议的问题时&#xff0c;时常会出现一个尴尬的局面&#xff0c;开发的同学认为这是网络组的问题&#xff0c;而网工的同学却认为是应用上的问题应该由开发组负责。今天希望通过这篇文章给网络7层做一个简单的说明。 关于七层协议的学习主要就是HTTP。…

【GO】k8s 管理系统项目16[前端部分--项目初始化]-学习记录

学习链接 https://blog.csdn.net/qq_29974229/article/details/129119279?spm1001.2014.3001.5502 nvm use v16.15.0 npm install vue -g npm install -g vue/clivue create k8s-plantform-fe选择 Default cd k8s-plantform-fe npm run servecd ./src mkdir views mkdir r…

如何在Java中创建和管理多线程应用程序,包括线程同步、线程间通信

在Java中创建和管理多线程应用程序涉及多个方面&#xff0c;包括线程的创建、线程同步和线程间通信。下面是一些关于这些主题的详细解释和示例代码&#xff1a; 创建线程&#xff1a; 在Java中有两种方式创建线程&#xff1a;实现Runnable接口或者继承Thread类。 通过实现Runn…

Java-认识异常

本章重点&#xff1a; 1. 异常概念与体系结构 2. 异常的处理方式 3. 异常的处理流程 4. 自定义异常类 1. 异常的概念与体系结构 1.1 异常的概念 在Java中&#xff0c;将程序执行过程中发生的不正常行为称为异常。比如之前写代码时经常遇到的&#xff1a; 1. 算术异常 2. 数组…

Linux CenTOS命令备忘

Linux CenTOS命令备忘 2.关机 shutdown -h now 立刻关机 shutdown -h 5 5分钟后关机poweroff 立刻关机 2.重启 shutdown -r now 立刻重启 shutdown -r 5 5分钟后重启reboot 立刻重启3.帮助 –help命令 shutdown --help&#xff1a;ifconfig --help&#xff1a;查看网卡信息m…

Python网络爬虫练习

爬取历年中国大学排名(前20名)&#xff0c;并随机选取一所高校画图展示其历年总分变化,并计算平均分&#xff0c;在图上展示该平均分直线&#xff1a; 代码如下&#xff1a; import matplotlib.pyplot as plt import pandas as pd import requests import randomdef main(yea…

普乐蛙绵阳科博会一场VR科普航天科学盛宴科普知识

普乐蛙绵阳科普展&#xff1a;一场科学盛宴&#xff0c;点燃孩子探索欲望的火花! 普乐蛙绵阳科普展正在如火如荼地进行中&#xff0c;吸引了无数孩子和家长的热情参与。这场科普盛宴以独特的内外视角&#xff0c;让人们感受到科学的魅力&#xff0c;激发了孩子们对知识的渴望和…

【挑战业余一周拿证】二、在云中计算 - 第 3 节 - Amazon EC2 定价

目录 第 3 节 - Amazon EC2 定价 一、按需 适用场景 二、Savings Plans 适用场景 三、预留实例 三种付款模式 四、Spot 实例 适用场景 五、专用主机 适用场景 关注订阅号 首页&#xff1a;【挑战业余一周拿证】AWS 认证云从业者 - 基础 课程目录&#xff1a;【挑…

机器视觉应用开发

机器视觉应用开发是指利用计算机视觉技术进行图像或视频数据处理和分析&#xff0c;实现自动化、智能化的应用程序开发。下面是机器视觉应用开发的一般步骤和常见任务。 需求分析&#xff1a;明确开发的机器视觉应用的具体需求和目标&#xff0c;例如人脸识别、目标检测、图像分…

【阅读记录】《联邦学习》杨强

第2章 隐私、安全及机器学习 2.3 威胁与安全模型 2.3.1 隐私威胁模型 对机器学习系统的攻击可能在任何阶段发生&#xff0c;包括数据发布、模型训练和模型推理。 模型训练阶段&#xff1a;重构攻击&#xff08;避免使用寻存储显式特征值的模型&#xff0c;SVM KNN等&…

深度学习之循环神经网络

视频链接&#xff1a;6 循环神经网络_哔哩哔哩_bilibili 给神经网络增加记忆能力 对全连接层而言&#xff0c;输入输出的维数固定&#xff0c;因此无法处理序列信息 对卷积层而言&#xff0c;因为卷积核的参数是共享的&#xff0c;所以卷积操作与序列的长度无关。但是因为卷积…

第十八章 控制 XML 元素和属性名称

文章目录 第十八章 控制 XML 元素和属性名称默认 XML 元素和属性名称控制映射为顶级元素的对象的元素或属性的名称 第十八章 控制 XML 元素和属性名称 类和属性名称与 XML 元素和属性的名称之间存在默认对应关系&#xff0c;可以覆盖这些默认值。 类和属性参数 XMLNAMEXMLTY…

人工智能与供应链行业融合:预测算法的通用化与实战化

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 让我们一起深入探索人工智能与供应链的融合&#xff0c;以及预测算法在实际应用中的价值&#xff01;&#x1f50d;&#x1f680; 文章目录 前言供应链预测算法的基本流程统计学习模型与机…

git突然失效:无法提交的问题 无法推送到远程仓库

git配置分为全局配置和局部配置 一般需要设置一个用户名和邮箱&#xff0c;将生成的ssh密钥绑定到远程账户上&#xff0c;拉取代码时会需要输入用户名与密码&#xff0c;输入正确即可。 局部配置为当前项目的配置 但尝试修改没有什么用 下面是一些修改git配置的命令 git conf…

N字形变换 Golang leecode_6

首先还是暴力&#xff0c;先构建一个 numRows 行&#xff0c;1000列的二维数组&#xff0c;然后将字符串 s 变成字符数组按照 N 字形排列&#xff0c;然后再 Z 字形遍历&#xff0c;代码逐过程调试很好看懂。 package mainimport ("fmt" )func convert(s string, nu…

MATLAB算法实战应用案例精讲-【图像处理】图像配准

目录 前言 知识储备 如何选择图像处理软件? OpenCV图像处理基础知识 图像的基本表示方法 像素处理

Mybatis入门(三)

作用域&#xff08;Scope&#xff09;和生命周期 对象生命周期和依赖注入框架 依赖注入框架可以创建线程安全的、基于事务的 SqlSession 和映射器&#xff0c;并将它们直接注入到你的 bean 中&#xff0c;因此可以直接忽略它们的生命周期。 如果对如何通过依赖注入框架使用 M…

【亚马逊云】基于EC2以 All-in-One 模式快速部署 KubeSphere 和 Kubernetes

文章目录 1. 云实例配置说明2. SSH连接云实例3. 查看系统版本4. 修改主机名5. 安装依赖项6. 安全组和DNS修改7. 下载KubeKey8. 同时安装Kubesphere和Kubernetes[可选]单独安装Kubernetes[可选]单独安装KubeSphere9. 验证KubeSphere安装结果10. 登录KubeSphere控制台[可选]安装K…

C/C++字节对齐

C/C字节对齐 C/C字节对齐1.G_PACKED2.1 pack(push)2.2 pack(1) 全部例子 C/C字节对齐 1.G_PACKED #ifdef __GNUC__#define G_PACKED( __Declaration__ ) __Declaration__ __attribute__((packed)) #else#define G_PACKED( __Declaration__ ) __pragma( pack(push,1)) __Decla…

sqli-labs靶场详解(less11-less16)

目录 less-11 less-12 less-13 less-14 less-15 less-16 提交参数后 动态参数不存在url中 存在于post表单中 于是在表单中进行注入点测试 先看一看这种提交数据的关卡输入提交后会有什么反应 unameadmin&passwdadmin&submitSubmit 输出 usernameadmin passwordadmin un…