在QML中获取$ HOME和/或用户名

Rad*_*anu 2 qml

我需要知道如何获取用户的用户名和/或主目录.我已经google了一段时间,但只能找到C++或BASH的变量.

如何获取用户名或主目录?我正在用QML写作.

noc*_*neo 6

这是我实现它的方式:

QmlEnvironmentVariable.h

#ifndef QMLENVIRONMENTVARIABLE_H
#define QMLENVIRONMENTVARIABLE_H

#include <QObject>

class QQmlEngine;
class QJSEngine;

class QmlEnvironmentVariable : public QObject
{
   Q_OBJECT
public:    
   Q_INVOKABLE static QString value(const QString &name);
   Q_INVOKABLE static void setValue(const QString &name, const QString &value);
   Q_INVOKABLE static void unset(const QString &name);
};

// Define the singleton type provider function (callback).
QObject *qmlenvironmentvariable_singletontype_provider(QQmlEngine *, QJSEngine *);

#endif // QMLENVIRONMENTVARIABLE_H
Run Code Online (Sandbox Code Playgroud)

QmlEnvironmentVariable.cpp

#include "QmlEnvironmentVariable.h"
#include <stdlib.h>

QString QmlEnvironmentVariable::value(const QString& name)
{
   return qgetenv(qPrintable(name));
}

void QmlEnvironmentVariable::setValue(const QString& name, const QString &value)
{
   qputenv(qPrintable(name), value.toLocal8Bit());
}

void QmlEnvironmentVariable::unset(const QString& name)
{
   qunsetenv(qPrintable(name));
}

QObject *qmlenvironmentvariable_singletontype_provider(QQmlEngine *, QJSEngine *)
{
   return new QmlEnvironmentVariable();
}
Run Code Online (Sandbox Code Playgroud)

然后main()添加对qmlRegisterSingletonType的调用(或者如果你正在创建插件,则在你重新实现的 QQmlExtensionPlugin :: registerTypes()方法中):

#include "QmlEnvironmentVariable.h"
#include <QQmlEngine>
// ...
qmlRegisterSingletonType<QmlEnvironmentVariable>("MyModule", 1, 0,
    "EnvironmentVariable", qmlenvironmentvariable_singletontype_provider);
Run Code Online (Sandbox Code Playgroud)

最后,在QML中使用它,如下所示:

import MyModule 1.0
Item {
  Component.onCompleted: console.log("My home directory: " + EnvironmentVariable.value("HOME"))
}
Run Code Online (Sandbox Code Playgroud)