Я хочу реализовать функцию в пользовательском интерфейсе, созданном в QT. Я хочу, чтобы, когда я нажимаю кнопку из пользовательского интерфейса, приложение отправляло системную команду на машину. Например, когда я нажимаю кнопку, должна выполняться команда 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), но я не знаю, куда его поместить (файл заголовка), потому что структура проекта пользовательского интерфейса сложна. Я пытаюсь добавить эту функцию в пользовательский интерфейс Neptune (https://github.com/qtproject/qt-apps-neptune-ui/tree/5.10), а файл qml можно найти в sysui/display/FunctionsPage.qml
Что нужно сделать, чтобы выполнить системную команду из файла qml?