Saya ingin mengimplementasikan fitur pada UI buatan QT. Saya menginginkannya, ketika saya menekan tombol dari UI, aplikasi harus mengirimkan perintah sistem ke mesin. Misalnya, ketika saya mengklik tombol, perintah sudo systemctl start application.service
harus dijalankan. Bagian dari file QML terlihat seperti ini:
...
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" ]);
}
...
}
...
Dan ini headernya:
#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();
}
};
Saya menemukan di sana beberapa kode c++ untuk perintah sistem (http://www.xargs.com/qml/process.html), tapi saya tidak tahu di mana harus meletakkannya (file header), karena struktur proyek UI rumit. Saya mencoba menambahkan fitur ini ke Neptune UI (https://github.com/qtproject/qt-apps-neptune-ui/tree/5.10), dan file qml dapat ditemukan di sysui/display/FunctionsPage.qml
Apa yang harus saya lakukan untuk menjalankan perintah sistem dari file qml?