【问题标题】:Qt plugin system command qmlQt插件系统命令qml
【发布时间】:2018-07-27 08:58:19
【问题描述】:

我想在 QT 制作的 UI 上实现一项功能。我希望,当我从 UI 按下按钮时,应用程序应该向机器发送系统命令。例如,当我单击按钮时,应该执行命令sudo systemctl start application.service。 QML 文件的部分如下所示:

    ...

    UIPage {
        id: root

        PopupInterface {
            id: popupInterface
            actions: [ { text: "OK" }, { text: "Cancel" } ]
            title: "Settings"

            ...

            onActionTriggered: {
                if (actionId === "0" && !currentState) {


                        Process.start("/bin/cat", [ "/proc/uptime" ]);


                } else if (actionId === "0" && currentState) {


                        Process.start("/bin/cat", [ "/proc/uptime" ]);


                }
                ...
            }
        ...

这是标题:

#include <QProcess>
#include <QVariant>

class Process : public QProcess {
    Q_OBJECT

public:
    Process(QObject *parent = 0) : QProcess(parent) { }

    Q_INVOKABLE void start(const QString &program, const QVariantList &arguments) {
        QStringList args;

        // convert QVariantList from QML to QStringList for QProcess 

        for (int i = 0; i < arguments.length(); i++)
            args << arguments[i].toString();

        QProcess::start(program, args);
    }

    Q_INVOKABLE QByteArray readAll() {
        return QProcess::readAll();
    }
};

我找到了一些系统命令的 c++ 代码(http://www.xargs.com/qml/process.html),但我不知道放在哪里(头文件),因为 UI 项目结构很复杂。我正在尝试将此功能添加到 Neptune UI (https://github.com/qtproject/qt-apps-neptune-ui/tree/5.10),qml 文件可以在sysui/display/FunctionsPage.qml 中找到我应该怎么做才能从 qml 文件执行系统命令?

【问题讨论】:

    标签: qt qml qmake


    【解决方案1】:

    您应该注册 C++ QObject 以使其在 Qml 代码中可用。 这可以通过以下调用来完成:

    qmlRegisterSingletonType<Process>("yourapp.tools", 1, 0, "Process", &createInstance);
    

    你可以先把它放在你的 main() 函数中,也许你自己知道更好的地方。

    createInstance 函数声明如下(您应该将它放在同一个文件中的某个位置):

    QObject *createInstance(QQmlEngine *eng, QJSEngine *js)
    {
        Q_UNUSED(eng)
        Q_UNUSED(js)
    
        return new Process;
    }
    

    您也可以以不同方式注册,而不是单例等。您可以在以下文档中找到相关信息:QQmlEngine。但我认为单身人士适合您的需求

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 2011-03-14
      • 2017-07-13
      • 1970-01-01
      • 2011-11-19
      • 2011-12-21
      • 1970-01-01
      相关资源
      最近更新 更多