Úlohou bolo napísať aplikáciu Qt Quick (GUI) na nahratie nového firmvéru na dotykový ovládač.
Softvér na nahrávanie poskytol výrobca v .exe aplikácii , ktorá načíta súbor .bin do dotykového ovládača.
Chcel som použiť triedy Qt "QProcess", ktoré možno použiť na volanie a ovládanie shell aplikácií. Na strane Linuxu som to už niekoľkokrát úspešne použil - ale v systéme Windows to spočiatku nefungovalo.
QProcess::setWorkingDirectory
"Trik" alebo riešenie na to bolo použiť "setWorkingDirectory". Tu je výňatok zo súborov .h a .cpp. Všimnite si riadok "process->setWorkingDirectory..." v súbore .cpp.
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:>
 
 