【发布时间】: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 文件执行系统命令?
【问题讨论】: