ਕੰਮ ਇੱਕ ਟੱਚ ਕੰਟਰੋਲਰ ਨੂੰ ਨਵੇਂ ਫਰਮਵੇਅਰ ਨੂੰ ਅੱਪਲੋਡ ਕਰਨ ਲਈ Qt Quick ਐਪਲੀਕੇਸ਼ਨ (GUI) ਲਿਖਣਾ ਸੀ।
ਅੱਪਲੋਡ ਸਾੱਫਟਵੇਅਰ ਨਿਰਮਾਤਾ ਦੁਆਰਾ ਇੱਕ .exe ਐਪਲੀਕੇਸ਼ਨ ਵਿੱਚ ਪ੍ਰਦਾਨ ਕੀਤਾ ਗਿਆ ਸੀ ਜੋ ਟੱਚ ਕੰਟਰੋਲਰ 'ਤੇ ਇੱਕ .bin ਫਾਈਲ ਲੋਡ ਕਰਦਾ ਹੈ।
ਮੈਂ Qt ਕਲਾਸਾਂ "QProcess" ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਚਾਹੁੰਦਾ ਸੀ, ਜਿਸ ਦੀ ਵਰਤੋਂ ਸ਼ੈੱਲ ਐਪਲੀਕੇਸ਼ਨਾਂ ਨੂੰ ਕਾਲ ਕਰਨ ਅਤੇ ਕੰਟਰੋਲ ਕਰਨ ਲਈ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ। ਲੀਨਕਸ ਵਾਲੇ ਪਾਸੇ, ਮੈਂ ਪਹਿਲਾਂ ਹੀ ਇਸ ਨੂੰ ਕਈ ਵਾਰ ਸਫਲਤਾਪੂਰਵਕ ਵਰਤ ਚੁੱਕਾ ਸੀ - ਪਰ ਵਿੰਡੋਜ਼ 'ਤੇ ਇਹ ਪਹਿਲਾਂ ਪਹਿਲ ਕੰਮ ਨਹੀਂ ਕਰ ਸਕਿਆ।
QProcess::setWorkingDirectory
ਇਸ ਦੇ ਲਈ "ਟਰਿੱਕ" ਜਾਂ ਹੱਲ "setWorkingDirectory" ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਸੀ। ਏਥੇ .h ਅਤੇ .cpp ਫਾਈਲਾਂ ਵਿੱਚੋਂ ਇੱਕ ਅੰਸ਼ ਦਿੱਤਾ ਜਾ ਰਿਹਾ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ .cpp ਫਾਇਲ ਵਿੱਚ "process->setWorkingDirectory..." ਲਾਈਨ ਨੋਟ ਕਰੋ।
cmdlauncher.h
#ifndef CMDLAUNCHER_H
#define CMDLAUNCHER_H
#include <QObject>
#include <QtQuick>
#include <QDebug>
#include <QProcess>
#include <QVariant>
#include <QString>
#include <QDir>
class CmdLauncher : public QProcess
{
Q_OBJECT
public:
CmdLauncher(QObject *parent = nullptr);
Q_INVOKABLE void start(const QString &program, const QVariantList &arguments);
QString application_directory;
};
#endif // CMDLAUNCHER_H
cmdlauncher.cpp
#include "cmdlauncher.h"
CmdLauncher::CmdLauncher(QObject *parent) : QProcess(parent)
{
process_running = "start";
}
void CmdLauncher::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();
// start request or upload process
QProcess * process = new QProcess();
process->setWorkingDirectory(application_directory + "/nConsoleTool");
process->setProcessChannelMode(QProcess::MergedChannels);
process->start(program, args);
process->waitForFinished();
// get values and set states
QByteArray bytes = process->readAll();
cmd_output = QString::fromLocal8Bit(bytes);
emit cmdOutputChanged();
}
}
main. qml
import QtQuick 2.9
import QtQuick.Window 2.3
import QtQuick.Controls 2.5
import QtQuick.Dialogs 1.2
import QtQuick.Layouts 1.3
import CmdLauncher 1.0
ApplicationWindow {
id: application_window
visible: true
width: 1024
height: 768
title: qsTr("Firmware Tool")
CmdLauncher {
id: launcher
}
Button {
id: nUpdateFW
x: 260
y: 20
width: 200
height: 30
text: "Upload Firmware"
onClicked: {
//console.log(launcher.application_directory + "/nConsoleTool/nUpdateFW.exe");
if (file_path == "") {
fileMissing.open();
} else {
launcher.start(launcher.application_directory + "/nConsoleTool/nUpdateFW.exe", [ file_path, "-ba" ]);
if (launcher.controller_detected == false) {
controllerMissing.open();
}
}
}
}
}
</:code3:></:code2:></:code1:>