这就是我的实现方式:
Qml环境变量.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
Qml环境变量.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();
}
Then in main()
添加一个呼叫qmlRegisterSingletonType http://qt-project.org/doc/qt-5/qqmlengine.html#qmlRegisterSingletonType-2(或者在你重新实现的QQmlExtensionPlugin::registerTypes() http://qt-project.org/doc/qt-5/qqmlextensionplugin.html#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"))
}