2013-05-06 1 views
2

Мне нужно знать, как получить имя пользователя и/или домашний каталог пользователей. Я искал время для поиска, но могу найти переменные для C++ или BASH.

Как получить имя пользователя или домашний каталог? Я пишу в QML.

+1

Спасибо за размещение на мой вопрос :) –

ответ

3

Вам нужно будет получить имя пользователя на C++, а затем обменять эти данные с C++ на qml.

Прочитано here Как обмениваться данными между qml и C++.

+1

я боялся. Я не знаю C++, и мне не интересно изучать его. Я просто не получаю эти файлы заголовков, а затем отдельный исходный файл. И тогда компилировать вещи. Я был бы рад получить помощь в этом вопросе. –

+2

@ DanielHolm qml может быть прост в использовании и обеспечивать возможность быстрого развития, но имеет свои ограничения. Я бы посоветовал вам также изучить C++. Может быть, только основы. Комбинация, СРОЧНО. Попробуйте прочитать это http://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/0321714113 или http://www.amazon.com/An-Introduction-Design-Patterns-Qt/dp/0131879057 если вы хотите напрямую пройти через Qt. Это не так сложно. Попытайтесь, упадите, придите в сообщество, люди обязательно помогут. –

+0

Большое спасибо, Амит. Я посмотрю. Также я попросил в списке почтовых сообщений Ubuntu Touch помочь, пока не смогу сделать это сам. В настоящее время я изучаю политическую экологическую науку, так что мой QML намного легче получить, чем C++ - на данный момент. Но, как я сказал, я посмотрю. –

5

Это, как я реализовал его:

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")) 
} 
+0

Я не знаю C++, поэтому не могу понять, как сделать третий шаг. Я вложил его в main.cpp, и я получил: /home/collin/liri-dev/liri-player/src/main.cpp:12: ошибка: «qmlRegisterSingletonType» не называет тип qmlRegisterSingletonType («MyModule», 1, 0, ^ – Cnorwood7641

+0

У меня пропала важная часть из этого фрагмента: #include nocnokneo

+0

@nocnokneo, в чём лицензия для этого кода? :-) –