tutorial gui descargar creator c++ qt qtcore

c++ - gui - Obtener nombre de usuario del sistema en Qt



qt gui (2)

Estuve pensando en ello hace un par de días, y llegué a la conclusión de tener diferentes alternativas, cada una con su propia compensación, a saber:

Variables de entorno usando qgetenv .

La ventaja de esta solución sería que es realmente fácil de implementar. El inconveniente es que si la variable de entorno está configurada en otra cosa, entonces esta solución es completamente poco fiable.

#include <QString> #include <QDebug> int main() { QString name = qgetenv("USER"); if (name.isEmpty()) name = qgetenv("USERNAME"); qDebug() << name; return 0; }

Ubicación de inicio con QStandardPaths

La ventaja es que es relativamente fácil de implementar, pero una vez más, puede no ser confiable fácilmente ya que es válido para usar diferentes nombres de usuario y "entrada" en la ubicación de inicio del usuario.

#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; }

Ejecutar procesos externos y usar API específicas de la plataforma

Esta es probablemente la más difícil de implementar, pero, por otro lado, parece ser la más confiable, ya que no se puede modificar tan fácilmente en la aplicación como con la variable de entorno o los trucos de ubicación de origen. En Linux, usaría QProcess para invocar el comando whoami usual, y en Windows, usaría GetUserName WinAPI para este propósito.

#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 }

Resumen : Yo personalmente buscaría la última variante ya que, aunque es la más difícil de implementar, es la más confiable.

¿Hay alguna forma de plataforma cruzada para obtener el nombre de usuario actual en un programa Qt C ++?

He rastreado internet y la documentación para encontrar una solución, pero lo único que encuentro son llamadas al sistema dependientes del sistema operativo.