Connexió del frontal en QML amb el rerefons en C++

De binefa.com
Salta a la navegació Salta a la cerca

main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>

#include "rerefons.h"

int main(int argc, char *argv[])
{
   QGuiApplication app(argc, argv);

   qmlRegisterType<RereFons>("desDel.rerefons",1,0,"RereFons");

   QQmlApplicationEngine engine;
   QObject::connect(
       &engine,
       &QQmlApplicationEngine::objectCreationFailed,
       &app,
       []() { QCoreApplication::exit(-1); },
       Qt::QueuedConnection);
   engine.loadFromModule("dynView14", "Main");

   return app.exec();
}

rerefons.h

class RereFons : public QObject
{
   Q_OBJECT
   Q_PROPERTY(QString tiBroker READ tiBroker WRITE setTiBroker NOTIFY brokerCanviat)
   Q_PROPERTY(QString tiBrokerUsr READ tiBrokerUsr WRITE setTiBrokerUsr NOTIFY brokerCanviat)
   Q_PROPERTY(QString tiBrokerPwd READ tiBrokerPwd WRITE setTiBrokerPwd NOTIFY brokerCanviat)
   Q_PROPERTY(QString szPublica WRITE setPublica)
   Q_PROPERTY(QString szRebut READ szRebut NOTIFY mqttRebut)
   Q_PROPERTY(int  nCmpt READ nCmpt WRITE setCmpt NOTIFY cmptChanged)
   ...
public: 
   QString tiBroker();
   void setTiBroker(const QString &szValue);
   QString tiBrokerUsr();
   void setTiBrokerUsr(const QString &szValue);
   QString tiBrokerPwd();
   void setTiBrokerPwd(const QString &szValue);
   void setPublica(const QString &szValue);
   QString szRebut();
   int nCmpt();
   void setCmpt(const int &nC);
   ...
signals:
   void brokerCanviat();
   void cmptChanged();

   void vSignalMqttConnected();
   void vSignalMqttConnecting();
   void vSignalMqttDisconnected();
   void mqttRebut();
   ...


   Q_INVOKABLE void saveMacs();

rerefons.cpp

#include "rerefons.h"

RereFons::RereFons(QObject *parent) : QObject(parent)
{
   m_bMqttConnected = false;

   timer = new QTimer(this);
   connect(timer,SIGNAL(timeout()),
           this,SLOT(vActualitza()));
   timer->start(500);

   mqtt = new MqttBasic;

   connect(mqtt,SIGNAL(vSignalMqttConnected()),this,SIGNAL(vSignalMqttConnected()));
   connect(mqtt,SIGNAL(vSignalMqttConnecting()),this,SIGNAL(vSignalMqttConnecting()));
   connect(mqtt,SIGNAL(vSignalMqttDisconnected()),this,SIGNAL(vSignalMqttDisconnected()));
   connect(mqtt,SIGNAL(vSignalMqttDisconnected()),this,SLOT(vMqttDesconnectat()));

   connect(mqtt,SIGNAL(vSignalMqttConnected()),this,SLOT(vSubscripcions()));
   connect(mqtt,SIGNAL(vSignalMqttMsgRcv(QString,QString)),this,SLOT(vMqttRebut(QString,QString)));

Main.qml

import QtQuick
import QtQuick.Controls
import desDel.rerefons 1.0

Window {
   id: finestra
   width: 905
   height: 480
   visible: true
   title: qsTr("dynView14")

   property var tiPwd: rf.tiBrokerPwd
   property var tiUsr: rf.tiBrokerUsr
   property var tiBroker: rf.tiBroker
   property var tiMac: "HMI"
   property bool bMqttConnected: false
   property int uiCheckedHeartBeats: 255

   signal senyalCanviSettingsMacPlc(int index,string preg,string resp)
   signal senyalCanviSettingsBroker(int index,string preg,string resp)

   Connections{
       target: finestra

       function onSenyalCanviSettingsBroker(nIndex,sPreg,sResp){
           //console.log("senyalCanviSettingsBroker");
           switch(nIndex){
           case 0: idSettings00.dades["brokerPort"] = sResp;
               console.log("idSettings00.dades[\"brokerPort\"] = "+sResp);
               break;
           case 1: idSettings00.dades["user"] = sResp;
               console.log("idSettings00.dades[\"user\"] = "+sResp);
               break;
           case 2: idSettings00.dades["password"] = sResp;
               console.log("idSettings00.dades[\"password\"] = "+sResp);
               break;
           default: console.log("No entenc canvis al broker");
           }
       }
   }

   RereFons{
       id: rf

       onVSignalMqttConnected: {
           console.log("MQTT connectat!");
           lbEstatMqtt.color = "#00ff00";
           lbEstatMqtt.text = "Connectat!";
           btConnecta.text = "Desconnecta";
           finestra.bMqttConnected = true;
           btSettings.visible = false;
       }

Vídeo de com fer-ho pas a pas

Vídeos QML