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

How to get system, user info with pure qml linux

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

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

或者我应该构建这样的服务吗?您有什么建议和想法?

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

复制的

1) 写一个包装器 class:

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

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

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

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() }

就是这样!

我想通了!我确实创建了自定义数据引擎,它通过 qdbus 桥提供用户信息,您可以从这里学习它的基础知识:https://techbase.kde.org/Development/Tutorials/Plasma4/DataEngines @douyw 基本上误解了这个问题,我不知道是谁忽略了这个问题。不管怎么说,这是新一代qml开发的一个重要问题,做Data Engines就是做API.