Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在QML中获取$HOME和/或用户名_Qml - Fatal编程技术网

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

在QML中获取$HOME和/或用户名,qml,Qml,我需要知道如何获取用户的用户名和/或主目录。我已经搜索了一段时间,但只能找到C++或BASH的变量。 如何获取用户名或主目录?我在QML中写。 < P>你必须在C++中获取用户名,然后将C++的数据交换到QML。 读取QML与C++之间的数据交换。< /P> < P>这是我如何实现的: QmlEnvironmentVariable.h \ifndef QMLENVIRONMENTVARIABLE\u H #定义QMLENVIRONMENTVARIABLE\u H #包括 QQmlEngine类;

我需要知道如何获取用户的用户名和/或主目录。我已经搜索了一段时间,但只能找到C++或BASH的变量。
如何获取用户名或主目录?我在QML中写。

< P>你必须在C++中获取用户名,然后将C++的数据交换到QML。

读取QML与C++之间的数据交换。< /P> < P>这是我如何实现的:

QmlEnvironmentVariable.h

\ifndef QMLENVIRONMENTVARIABLE\u H
#定义QMLENVIRONMENTVARIABLE\u H
#包括
QQmlEngine类;
QJS类发动机;
类QmlEnvironmentVariable:公共QObject
{
Q_对象
公众:
Q_可调用的静态QString值(const QString&name);
Q_可调用的静态void setValue(const-QString&name,const-QString&value);
Q_可调用静态void unset(const QString&name);
};
//定义单例类型提供程序函数(回调)。
QObject*qmlenvironmentvariable\u singletontype\u提供程序(QQmlEngine*,QJSEngine*);
#endif//QMLENVIRONMENTVARIABLE\u H
QmlEnvironmentVariable.cpp

#包括“QmlEnvironmentVariable.h”
#包括
QString QmlEnvironmentVariable::value(常量QString&name)
{
返回qgetenv(qPrintable(name));
}
void QmlEnvironmentVariable::setValue(常量QString&name,常量QString&value)
{
qputenv(qPrintable(name),value.toLocal8Bit());
}
void QmlEnvironmentVariable::unset(常量QString&name)
{
qunsetenv(可打印(名称));
}
QObject*qmlenvironmentvariable\u singletontype\u提供程序(QQmlEngine*,QJSEngine*)
{
返回新的QmlEnvironmentVariable();
}
然后在
main()

#包括“QmlEnvironmentVariable.h”
#包括
// ...
qmlRegisterSingletonType(“MyModule”,1,0,
“环境变量”,qmlenvironmentvariable\u singletontype\u provider);
最后,在QML中使用它,如下所示:

导入MyModule 1.0
项目{
Component.onCompleted:console.log(“我的主目录:”+EnvironmentVariable.value(“主目录”))
}

我的解决方案如下:

1.)使用
config
类创建
config.h
文件:

#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

然后,您只需在qml js文件中调用
config.getHome()

谢谢您发布我的问题:)我很害怕。我不知道C++,也不感兴趣。我只是没有得到这些头文件,然后是一个单独的源文件。然后去编译东西。我很乐意在这件事上得到一些帮助。@DanielHolm qml可能易于使用并提供快速开发能力,但有其局限性。我建议你也学习C++。可能只是最基本的。这种组合是致命的。试着阅读这篇文章,或者如果你想直接通过Qt的方式。没那么难。尝试,秋天,来到社区,人们一定会帮助你。非常感谢,阿米特。我来看看。另外,我在Ubuntu Touch邮件列表中请求了一些帮助,直到我自己能够完成。我目前正在学习政治环境科学,这是我的QML现在更容易去C++。但是,正如我说的,我会看一看。我不知道C++,所以我不能告诉你如何做第三步。我将它粘贴到main.cpp中,得到了:/home/collin/liri-dev/liri-player/src/main.cpp:12:错误:“qmlRegisterSingletonType”没有命名类型qmlRegisterSingletonType(“MyModule”,1,0,^Whoops。我在该片段中缺少一个重要部分:#include
int main(int argc, char *argv[]) {
    ...
    Config config;
    viewer.rootContext()->setContextProperty("config", config);
}