zoukankan      html  css  js  c++  java
  • 怎样在Ubuntu手机应用中得到全部的环境变量值

    我们在先前的例程中已经通过一些方法得到我们应用的一些环境变量值。这些值有的很实用。比方我们能够得到我们应用所仅仅能訪问的文件夹。在今天的例程中,我们来展示一种方法能够得到应用全部的环境变量。在我们的实际应用中,我们能够通过这些环境变量来做一些事情。另外,在这个例程中。我们也展示了怎样在Qt C++的代码中构造我们的ListView中的model。

    我们在先前的例程“Ubuntu OS应用Runtime Enviroment”已经展示了和我们平台安全相关的一些环境变量。


    首先,我们来展示我们所使用的model dataobject:


    dataobject.h


    #ifndef DATAOBJECT_H
    #define DATAOBJECT_H
    
    #include <QObject>
    
    class DataObject : public QObject
    {
        Q_OBJECT
    
        Q_PROPERTY(QString key READ key WRITE setKey NOTIFY keyChanged)
        Q_PROPERTY(QString value READ value WRITE setValue NOTIFY valueChanged)
    
    public:
        DataObject(QObject *parent=0);
        DataObject(const QString &key, const QString &value, QObject *parent=0);
    
        QString key() const;
        void setKey(const QString &key);
    
        QString value() const;
        void setValue(const QString &value);
    
    signals:
        void keyChanged();
        void valueChanged();
    
    private:
        QString m_key;
        QString m_value;
    };
    
    #endif // DATAOBJECT_H
    


    dataobject.cpp


    #include <QDebug>
    #include "dataobject.h"
    
    DataObject::DataObject(QObject *parent)
        : QObject(parent)
    {
    }
    
    DataObject::DataObject(const QString &key, const QString &value, QObject *parent)
        : QObject(parent), m_key(key), m_value(value)
    {
    }
    
    QString DataObject::key() const
    {
        return m_key;
    }
    
    void DataObject::setKey(const QString &key)
    {
        if (key != m_key) {
            m_key = key;
            emit keyChanged();
        }
    }
    
    QString DataObject::value() const
    {
        return m_value;
    }
    
    void DataObject::setValue(const QString &value)
    {
        if (value != m_value) {
            m_value = value;
            emit valueChanged();
        }
    }
    


    这个model dataobject是为了我们能够在ListView中显示我们的key及value。



    main.cpp


    #include <QGuiApplication>
    #include <QQmlApplicationEngine>
    #include <QQuickView>
    #include <QProcessEnvironment>
    #include <QQmlContext>
    #include <QDebug>
    
    #include "dataobject.h"
    
    int main(int argc, char *argv[])
    {
        QGuiApplication app(argc, argv);
    
        // Try to get all of the env variables here
        QProcessEnvironment environment = QProcessEnvironment::systemEnvironment();
    
        QStringList keys = environment.keys();
    
        QList<QObject*> dataList;
    
        foreach (QString key, keys) {
            qDebug() << "key: " << key;
    
            QString value = environment.value(key);
            qDebug() << "value: " << value;
    
            dataList.append(new DataObject(key, value));
        }
    
        QQuickView view;
        view.setSource(QUrl(QStringLiteral("qrc:///Main.qml")));
        view.setResizeMode(QQuickView::SizeRootObjectToView);
    
        QQmlContext *ctxt = view.rootContext();
        ctxt->setContextProperty("varModel", QVariant::fromValue(dataList));
    
        view.show();
        return app.exec();
    }
    


    在上面,我们通过QProcessEnvironment来得到我们全部的环境变量,并把它们装在我们的datalist变量中。

    这个datalist将在我们的QML中以varModel的形式訪问。


    Main.qml


    import QtQuick 2.0
    import Ubuntu.Components 1.1
    import Ubuntu.Components.ListItems 1.0 as ListItem
    
    /*!
        rief MainView with a Label and Button elements.
    */
    
    MainView {
        // objectName for functional testing purposes (autopilot-qt5)
        objectName: "mainView"
    
        // Note! applicationName needs to match the "name" field of the click manifest
        applicationName: "runtime.liu-xiao-guo"
    
        /*
         This property enables the application to change orientation
         when the device is rotated. The default is false.
        */
        //automaticOrientation: true
    
        // Removes the old toolbar and enables new features of the new header.
        useDeprecatedToolbar: false
    
         units.gu(60)
        height: units.gu(85)
    
        Page {
            title: i18n.tr("Run time variables")
    
            Column {
                anchors.fill: parent
    
                ListItem.Base {
                    id: header
                    height: ubuntuLabel.height + runtime.height + units.gu(6)
    
                    Column {
                        anchors.left: parent.left
                        anchors.right: parent.right
                        anchors.centerIn: parent
                        spacing: units.gu(2)
                        Label {
                            id: ubuntuLabel
                            anchors.horizontalCenter: parent.horizontalCenter
                            text: ""
                            fontSize: "x-large"
                        }
                        Label {
                            id: runtime
                            anchors.horizontalCenter: parent.horizontalCenter
                            text: "Runtime Environment"
                        }
                    }
                }
    
                ListView {
                    height: parent.height - header.height
                     parent.width
                    model: varModel
                    clip: true
    
                    delegate:  ListItem.Subtitled {
                        text: key
                        subText: value
                    }
                }
    
            }
        }
    }
    


    这里的显示很easy。

    我们直接使用一个ListView来显示我们的数据。


    执行我们的应用:

        



  • 相关阅读:
    asp.net core-15.Individual authentication 模板
    Thread,Task,async/await,IAsyncResult
    asp.net core-14.JWT认证授权 生成 JWT Token
    asp.net core-13.Cookie-based认证实现
    asp.net core-12.dotnet watch run 和attach到进程调试
    asp.net core-11.WebHost的配置
    asp.net core-10.Http请求的处理过程
    asp.net core-9.依赖注入的使用
    asp.net core-8. 配置的热更新
    asp.net core-7.在Core Mvc中使用Options
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8743840.html
Copyright © 2011-2022 走看看