我需要知道如何获取用户的用户名和/或主目录。我已经google了一段时间,但只能找到C ++或BASH的变量。
如何获取用户名或主目录?我正在用QML写作。
答案 0 :(得分: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
<强> 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();
}
然后在main()
中添加对qmlRegisterSingletonType的调用(或者在您创建插件时重新实现QQmlExtensionPlugin::registerTypes()方法):
#include "QmlEnvironmentVariable.h"
#include <QQmlEngine>
// ...
qmlRegisterSingletonType<QmlEnvironmentVariable>("MyModule", 1, 0,
"EnvironmentVariable", qmlenvironmentvariable_singletontype_provider);
最后,在QML中使用它,如下所示:
import MyModule 1.0
Item {
Component.onCompleted: console.log("My home directory: " + EnvironmentVariable.value("HOME"))
}
答案 1 :(得分:3)
您必须在C ++中获取用户名,然后将该数据从C ++交换到qml。
阅读here如何在qml和C ++之间交换数据。
答案 2 :(得分:0)
我的解决方案是这样的:
1。)使用config.h
类创建Config
文件:
#ifndef CONFIG_H
#define CONFIG_H
#include <QString>
#include <QObject>
#include <QStandardPaths>
class Config : public QObject
{
Q_OBJECT
public:
explicit Config(QObject *parent = nullptr) {}
Q_INVOKABLE QString getHome() {
return QStandardPaths::standardLocations(QStandardPaths::HomeLocation).first();
}
};
#endif // CONFIG_H
2。)在setContextProperty(...)
中设置main.cpp
int main(int argc, char *argv[]) {
...
Config config;
viewer.rootContext()->setContextProperty("config", config);
}
然后,您只需在qml-js文件中调用config.getHome()
。