Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Italian
  4. Aggiornamento dati
Forum Updated to NodeBB v4.3 + New Features

Aggiornamento dati

Scheduled Pinned Locked Moved Solved Italian
22 Posts 2 Posters 5.6k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • L Offline
    L Offline
    Lorenz_95
    wrote on last edited by
    #13

    ok, ho guardato degli esempi e adesso mi è più chiaro come funziona.
    Infine quando chiamo void mygrafic3d::estrai_dati(const QByteArray &stringa) in "stringa" ho il valore che è cambiato dopo aver emesso il segnale "cambiadato" corretto?

    1 Reply Last reply
    0
    • VRoninV VRonin

      quasi.

      // Prima della chiamata di addData
      m_series->dataProxy()->resetArray( new QScatterDataArray);
      
      void mygrafic3d::addData()
      {
      	QScatterDataArray* array = m_series->dataProxy()->array();
      array->append(QScatterDataItem(QVector3D(xpos, ypos, zpos)));
          m_series->dataProxy()->resetArray(array );
      }
      
      L Offline
      L Offline
      Lorenz_95
      wrote on last edited by VRonin
      #14

      @VRonin said in Aggiornamento dati:

      // Prima della chiamata di addData
      m_series->dataProxy()->resetArray( new QScatterDataArray);

      void mygrafic3d::addData()
      {
      QScatterDataArray* array = m_series->dataProxy()->array();
      array->append(QScatterDataItem(QVector3D(xpos, ypos, zpos)));
      m_series->dataProxy()->resetArray(array );
      }

      Il compilatore mi da errore in questa funzione, dicendo che:

      *****"error: cannot initialize a variable of type 'QtDataVisualization::QScatterDataArray *' (aka 'QVector<QtDataVisualization::QScatterDataItem> *') with an rvalue of type 'const QtDataVisualization::QScatterDataArray *' (aka 'const QVector<QtDataVisualization::QScatterDataItem> *')"*****
      
      **error: invalid conversion from 'const QScatterDataArray* {aka const QVector<QtDataVisualization::QScatterDataItem>*}' to 'QtDataVisualization::QScatterDataArray* {aka QVector<QtDataVisualization::QScatterDataItem>*}' [-fpermissive]
           QScatterDataArray *array = m_series->dataProxy()->array();
      ^**
      

      Io nel file .h ho già definito private: QScatterDataArray *m_array; questo può essere causa dell errore? Come modifico il codice che mi hai scritto?

      1 Reply Last reply
      0
      • VRoninV Offline
        VRoninV Offline
        VRonin
        wrote on last edited by
        #15

        no, e' solo un problema di constness:

        void mygrafic3d::addData()
        {
        	QScatterDataArray* array = new QScatterDataArray(*m_series->dataProxy()->array());
        m_series->dataProxy()->resetArray(Q_NULLPTR);
        array->append(QScatterDataItem(QVector3D(xpos, ypos, zpos)));
            m_series->dataProxy()->resetArray(array );
        }
        

        "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
        ~Napoleon Bonaparte

        On a crusade to banish setIndexWidget() from the holy land of Qt

        1 Reply Last reply
        0
        • L Offline
          L Offline
          Lorenz_95
          wrote on last edited by
          #16
          #include <QtDataVisualization>
          #include <QtWidgets>
          #include <QDialog>
          #include <QtCore>
          #include <QObject>
          #include <stdio.h>
          #include <stdlib.h>
          
          #include "mygrafic3d.h"
          #include "myserver.h"
          
          using namespace QtDataVisualization;
          
          mygrafic3d::mygrafic3d(Q3DScatter *scatter)
              : m_graph(scatter),
                m_fontSize(40.0f),
                m_style(QAbstract3DSeries::MeshSphere),
                m_smooth(true),
                m_series(new QScatter3DSeries)/*,
                m_array(new QScatterDataArray)*/
          {
              //Modifiche visive
              m_graph->activeTheme()->setType(Q3DTheme::ThemeQt);
              QFont font = m_graph->activeTheme()->font();
              font.setPointSize(m_fontSize);
              m_graph->activeTheme()->setFont(font);
              m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualitySoftLow);
              m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetFront);
          
              m_graph->axisX()->setTitle("X");
              m_graph->axisY()->setTitle("Y");
              m_graph->axisZ()->setTitle("Z");
          
              m_graph->axisX()->setTitleVisible(true);
              m_graph->axisY()->setTitleVisible(true);
              m_graph->axisZ()->setTitleVisible(true);
          
              //creo un QScatterDataProxy e il QScatter3DSeries associato
              QScatterDataProxy *proxy = new QScatterDataProxy;
              m_series = new QScatter3DSeries(proxy);
              m_series->setItemLabelFormat(QStringLiteral("@xTitle: @xLabel @yTitle: @yLabel @zTitle: @zLabel"));
              m_series->setMeshSmooth(m_smooth);
              m_graph->addSeries(m_series);
          
              // Prima della chiamata di addData
              m_series->dataProxy()->resetArray(new QScatterDataArray);
          	
              connect(&server, SIGNAL(Signal_Data(const QByteArray &)), this, SLOT(slot_data(const QByteArray &)));
              qDebug() << "segnale ricevuto";
          }
          
          
          mygrafic3d::~mygrafic3d()
          {
              delete m_graph;
          }
          
          
          void mygrafic3d::slot_data(const QByteArray &stringa)
          {
              strcpy(dato, stringa);
              qDebug()<< "Valore dato: " << dato;
          
              estrai_dati();
              addData();
          }
          
          
          void mygrafic3d::addData()
          {
              QScatterDataArray* array = new QScatterDataArray(*m_series->dataProxy()->array());
              m_series->dataProxy()->resetArray(Q_NULLPTR);
              array->append(QScatterDataItem(QVector3D(xpos, ypos, zpos)));
              m_series->dataProxy()->resetArray(array);
          }
          

          In definitiva quello che ho scritto adesso è questo, dovrebbe essere tutto corretto.
          Il mio unico dubbio è se ho scritto correttamente la connect() perchè non l avevo mai usata prima, potreste dargli un occhio?

          1 Reply Last reply
          0
          • VRoninV Offline
            VRoninV Offline
            VRonin
            wrote on last edited by VRonin
            #17

            usa la connect di Qt5 cosi' non rischi typos. ServerClass qui e' il tipo di server.

            connect(&server, &ServerClass::Signal_Data, this, &mygrafic3d::slot_data);

            "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
            ~Napoleon Bonaparte

            On a crusade to banish setIndexWidget() from the holy land of Qt

            1 Reply Last reply
            0
            • L Offline
              L Offline
              Lorenz_95
              wrote on last edited by
              #18
              void mygrafic3d::addData()
              {
                 QScatterDataArray* array = new QScatterDataArray(*m_series->dataProxy()->array());
                 m_series->dataProxy()->resetArray(Q_NULLPTR);
                 array->append(QScatterDataItem(QVector3D(xpos, ypos, zpos)));
                 m_series->dataProxy()->resetArray(array );
              }
              

              Ma in questa funzione non manca una funzione per plottare i dati sul grafico? Come ad esempio addSeries()?

              1 Reply Last reply
              0
              • VRoninV Offline
                VRoninV Offline
                VRonin
                wrote on last edited by
                #19

                resetArray emette il segnale QScatterDataProxy::arrayReset che il grafico riceve e sa che deve aggiornarsi

                "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                ~Napoleon Bonaparte

                On a crusade to banish setIndexWidget() from the holy land of Qt

                1 Reply Last reply
                0
                • L Offline
                  L Offline
                  Lorenz_95
                  wrote on last edited by Lorenz_95
                  #20
                  This post is deleted!
                  VRoninV 1 Reply Last reply
                  0
                  • L Lorenz_95

                    This post is deleted!

                    VRoninV Offline
                    VRoninV Offline
                    VRonin
                    wrote on last edited by
                    #21

                    @Lorenz_95 said in Aggiornamento dati:

                    Avete idea di quale possa essere il problema?

                    Identico a quello di prima:
                    @VRonin said in Aggiornamento dati:

                    Stai bloccando l'event loop

                    Nel codice che hai postato il pezzo piu' sospetto e':

                    //aspetto che venga emesso nel client il segnale readyRead()
                            if (socket->waitForReadyRead(3000))
                    

                    Mentre aspetti il grafico non puo' aggiornarsi. Se hai un loop infinito attorno a quel pezzo di codice il grafico non ha mai il tempo di aggiornarsi perche' stai occupando il thread con altre operazioni. Invece di fare un loop infinito e aspettare un segnale semplicemente connetti il segnale allo slot che esegue le operazioni

                    "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                    ~Napoleon Bonaparte

                    On a crusade to banish setIndexWidget() from the holy land of Qt

                    1 Reply Last reply
                    0
                    • L Offline
                      L Offline
                      Lorenz_95
                      wrote on last edited by
                      #22

                      Risolto!
                      Il problema stava proprio in quel codice perchè era messo al interno di un loop infinito, adesso il programma funziona.
                      Grazie mille per l'aiuto

                      1 Reply Last reply
                      0

                      • Login

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups
                      • Search
                      • Get Qt Extensions
                      • Unsolved