如何使用纯qml linux获取系统,用户信息

时间:2015-05-09 10:33:22

标签: linux qt qml kde plasmoid

我正在准备纯qml plasmoid用于我在KDE Plasma 4中的新面板外观,我必须使用最多的Qt 4.7库和Qt.Quick 1.1。是否可以获取当前用户的全名? 是否存在与PlasmaCore或KSM等相关的等离子API或任何PlasmaCore数据源引擎,如下所示:

#import org.kde.PlasmaCore 0.1 PlasmaCore
{
  Item{
      PlasmaCore.DataSource{
          engine  : "SystemInformation"
          connection : "get_user_fullname"
      }
  }
}

或者我应该建立这样的服务?你有什么建议和想法?谢谢你的到来。

2 个答案:

答案 0 :(得分:1)

我想通了!我确实创建了自定义数据引擎,通过qdbus桥提供用户信息,你可以从这里学习它的基础知识:https://techbase.kde.org/Development/Tutorials/Plasma4/DataEngines @douyw基本上误解了这个问题,我不知道是谁歪曲了这个问题。无论如何,它是新一代qml开发的一个重要问题,使得数据引擎只是简单地制作API。

答案 1 :(得分:0)

任何东西都可以通过cpp包装器导出到qml上下文中。以下示例代码段从official doc(Qt4.8)复制。

1)写一个包装类:

在此示例中,它导出当前日期时间。你可以用类似的方式导出你的东西。

class ApplicationData : public QObject
{
    Q_OBJECT
public:
    Q_INVOKABLE QDateTime getCurrentDateTime() const {
        return QDateTime::currentDateTime();
    }
};

2)通过qml上下文导出包装类:

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QDeclarativeView view;

    ApplicationData data;
    view.rootContext()->setContextProperty("applicationData", &data);

    view.setSource(QUrl::fromLocalFile("MyItem.qml"));
    view.show();

    return app.exec();
}

3)在qml文件(MyItem.qml)中使用它:

import QtQuick 1.0

Text { text: applicationData.getCurrentDateTime() }

那就是它!