Qt ایپلی کیشن میں Windows .exe چلائیں

ٹاسک ٹچ کنٹرولر پر نئے فرم ویئر کو اپ لوڈ کرنے کے لئے کیو ٹی کوئیک ایپلی کیشن (جی یو آئی) لکھنا تھا۔
اپ لوڈ سافٹ ویئر کارخانہ دار کی طرف سے ایک .exe ایپلی کیشن میں فراہم کیا گیا تھا جو ٹچ کنٹرولر پر ایک .bin فائل لوڈ کرتا ہے۔
میں کیو ٹی کلاس "کیو پروسیس" استعمال کرنا چاہتا تھا ، جسے شیل ایپلی کیشنز کو کال اور کنٹرول کرنے کے لئے استعمال کیا جاسکتا ہے۔ لینکس سائیڈ پر ، میں نے پہلے ہی اسے کئی بار کامیابی سے استعمال کیا تھا - لیکن ونڈوز پر یہ پہلے کام نہیں کرتا تھا۔

QProcess::سیٹ ورکنگ ڈائریکٹوری

اس کے لئے "چال" یا حل "سیٹ ورکنگ ڈائریکٹری" کا استعمال کرنا تھا۔ یہاں .h اور .cpp فائلوں سے ایک اقتباس ہے۔ براہ کرم .cpp فائل میں "پروسیس > سیٹ ورکنگ ڈائرکٹری ..." لائن نوٹ کریں۔
cmdlanuncher.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

cmdlanuncher.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:>