Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. [solved] Newbie is confused.How to add dynamic data to TableView and parse through it send data to c++
Forum Updated to NodeBB v4.3 + New Features

[solved] Newbie is confused.How to add dynamic data to TableView and parse through it send data to c++

Scheduled Pinned Locked Moved QML and Qt Quick
42 Posts 3 Posters 15.9k Views 3 Watching
  • 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.
  • vishnuV vishnu

    @p3c0
    May I know why the roles and data are in reverse order?
    What i get is:
    "tracking_z"
    "tracking_y"
    "tracking_x"
    "deceleration"
    "velocity"
    "z_position"
    "y_position"
    "x_position"
    But it should be in reverse order.
    what i expect the data at
    qDebug() << model->index(i, 0).data(j)
    is the first row and first column from left side of TableView. But It is starting from right side. How do I make it correct?Thanks

    p3c0P Offline
    p3c0P Offline
    p3c0
    Moderators
    wrote on last edited by
    #12

    @vishnu That is completely internal. The processing of roles and properties by the engine cannot be controlled.
    To correct it the only way is to read the properties in reverse order in the loop :)

    157

    1 Reply Last reply
    0
    • p3c0P p3c0

      @vishnu
      QObject* root = engine.rootObjects().first();
      do this after loading the QML.

      But how do i get engine which is instanstiated in main.cpp to the function where I have to handle the data? Because engine is not declared in this scope right? Thanks

      Pass the pointer or reference of engine to that function.

      vishnuV Offline
      vishnuV Offline
      vishnu
      wrote on last edited by vishnu
      #13

      @p3c0
      I am still getting the error.
      ASSERT: "!isEmpty()" in file ......\Qt5.4.1\5.4\mingw491_32\include/QtCore/qlist.h, line 292
      Invalid parameter passed to C runtime function.
      Invalid parameter passed to C runtime function.
      My main.cpp:

      int main(int argc, char *argv[])
      {
          QGuiApplication app(argc, argv);
          QQmlApplicationEngine engine;
          TCPCommunicationPort tcpCommunicationPort;
          auto root_context = engine.rootContext();
          root_context->setContextProperty("tcpCommunicationPort",&tcpCommunicationPort);
          engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
          QObject* root = engine.rootObjects().first();// error at this point
          return app.exec();
      }
      

      The same main code was working fine in another project but When i copied the same in new project it's again saying the same error. I have loaded main.qml before
      QObject* root = engine.rootObjects().first();
      May i know what's the mistake?

      p3c0P 1 Reply Last reply
      0
      • vishnuV vishnu

        @p3c0
        I am still getting the error.
        ASSERT: "!isEmpty()" in file ......\Qt5.4.1\5.4\mingw491_32\include/QtCore/qlist.h, line 292
        Invalid parameter passed to C runtime function.
        Invalid parameter passed to C runtime function.
        My main.cpp:

        int main(int argc, char *argv[])
        {
            QGuiApplication app(argc, argv);
            QQmlApplicationEngine engine;
            TCPCommunicationPort tcpCommunicationPort;
            auto root_context = engine.rootContext();
            root_context->setContextProperty("tcpCommunicationPort",&tcpCommunicationPort);
            engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
            QObject* root = engine.rootObjects().first();// error at this point
            return app.exec();
        }
        

        The same main code was working fine in another project but When i copied the same in new project it's again saying the same error. I have loaded main.qml before
        QObject* root = engine.rootObjects().first();
        May i know what's the mistake?

        p3c0P Offline
        p3c0P Offline
        p3c0
        Moderators
        wrote on last edited by
        #14

        @vishnu Can you post the QML part ? i.e main.qml

        157

        vishnuV 1 Reply Last reply
        0
        • p3c0P p3c0

          @vishnu Can you post the QML part ? i.e main.qml

          vishnuV Offline
          vishnuV Offline
          vishnu
          wrote on last edited by vishnu
          #15

          @p3c0
          main.qml

          import QtQuick 2.3
          import QtQuick.Window 2.2
          import QtQuick.Controls 1.3
          
          Window{
              id:window
              width: Screen.width
              height: Screen.height
              visible: true
          
              Item{
                  id:mainUI
                  anchors.fill: parent
                  Header{
                      id:header
                  }
                  CentralView{
                      id:centralView
                      anchors.top: header.bottom
                      anchors.bottom: footer.top
                  }
                  //Model
                  SetTable{
                      id:setTable
                      anchors.top: header.bottom
                      anchors.bottom: footer.top
                      visible: false
                  }
                  Footer {
                      id: footer
                      anchors.bottom: parent.bottom
                  }
                  states: [
                      State {
                          name: "MainView"
                          PropertyChanges {target: centralView;cycRegVisible:false; ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                          PropertyChanges {target: footer;backButtonvisible:false; }
                      },
                      //setTable view state
                      State {
                          name: "SetTableView"
                          PropertyChanges {target: centralView;centralViewVisible:false;}
                          PropertyChanges {target: setTable;visible:true;}
                          PropertyChanges {target: footer;forwardButtonvisible:false;}
                      },
                      State {
                          name: "CyclicRegisterView"
                          PropertyChanges {target: centralView;cycRegVisible:true }
                          PropertyChanges {target: footer;backButtonvisible:true}
                          PropertyChanges {target: centralView;ctrlReg1Visible:false }
                          PropertyChanges {target: centralView;ctrlReg2Visible:false }
                          PropertyChanges {target: centralView;cmodeRegVisible:false }
                          PropertyChanges {target: centralView;directModeRegVisible:false }
                          PropertyChanges {target: centralView;trackingModeRegVisible:false }
                          PropertyChanges {target: centralView;displayViewVisible:false }
                      },
                      State {
                          name: "ControlRegister1View"
                          PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:true;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                          PropertyChanges {target: centralView;trackingModeRegVisible:false }
                          PropertyChanges {target: footer;backButtonvisible:true; }
                          PropertyChanges {target: centralView;displayViewVisible:false }
                      },
                      State {
                          name: "ControlRegister2View"
                          PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:true;cmodeRegVisible:false;directModeRegVisible:false}
                          PropertyChanges {target: centralView;trackingModeRegVisible:false }
                          PropertyChanges {target: footer;backButtonvisible:true; }
                          PropertyChanges {target: centralView;displayViewVisible:false }
                      },
                      State {
                          name: "OperationModeRegisterView"
                          PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:true;directModeRegVisible:false }
                          PropertyChanges {target: centralView;trackingModeRegVisible:false ;homingModeRegVisible:false}
                          PropertyChanges {target: footer;backButtonvisible:true; }
                          PropertyChanges {target: centralView;displayViewVisible:false }
                      },
                      State {
                          name: "DirectModeRegisterView"
                          PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:true}
                          PropertyChanges {target: centralView;trackingModeRegVisible:false ;homingModeRegVisible:false}
                          PropertyChanges {target: footer;backButtonvisible:true; }
                          PropertyChanges {target: centralView;displayViewVisible:false }
                      },
                      State {
                          name: "SetTableModeRegisterView"
                          PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                          PropertyChanges {target: centralView;setTableModeRegVisible:true;trackingModeRegVisible:false;homingModeRegVisible:false}
                          PropertyChanges {target: footer;backButtonvisible:true; }
                          PropertyChanges {target: centralView;displayViewVisible:false }
                      },
                      State {
                          name: "TrackingModeRegisterView"
                          PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                          PropertyChanges {target: centralView;setTableModeRegVisible:false;trackingModeRegVisible:true;homingModeRegVisible:false}
                          PropertyChanges {target: footer;backButtonvisible:true; }
                          PropertyChanges {target: centralView;displayViewVisible:false }
                      },
                      State {
                          name: "HomingModeRegisterView"
                          PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                          PropertyChanges {target: centralView;setTableModeRegVisible:false;trackingModeRegVisible:false;homingModeRegVisible:true}
                          PropertyChanges {target: footer;backButtonvisible:true; }
                          PropertyChanges {target: centralView;displayViewVisible:false }
                      },
                      State {
                          name: "JoggingModeRegisterView"
                          PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                          PropertyChanges {target: centralView;setTableModeRegVisible:false;trackingModeRegVisible:false;homingModeRegVisible:false;jogginModeRegVisible:true}
                          PropertyChanges {target: footer;backButtonvisible:true; }
                          PropertyChanges {target: centralView;displayViewVisible:false }
                      },
                      State {
                          name: "SAcyclicRegisterView"
                          PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                          PropertyChanges {target: centralView;setTableModeRegVisible:false;trackingModeRegVisible:false;homingModeRegVisible:false;jogginModeRegVisible:false}
                          PropertyChanges {target: footer;backButtonvisible:true; }
                          PropertyChanges {target: centralView;displayViewVisible:true;controlViewVisible:false;sAcycRegVisible:true }
                      },
                      State {
                          name: "StatusRegister1View"
                          PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                          PropertyChanges {target: centralView;setTableModeRegVisible:false;trackingModeRegVisible:false;homingModeRegVisible:false;jogginModeRegVisible:false}
                          PropertyChanges {target: footer;backButtonvisible:true; }
                          PropertyChanges {target: centralView;displayViewVisible:true;controlViewVisible:false;sAcycRegVisible:false;statusReg1Visible:true }
                      },
                      State {
                          name: "StatusRegister2View"
                          PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                          PropertyChanges {target: centralView;setTableModeRegVisible:false;trackingModeRegVisible:false;homingModeRegVisible:false;jogginModeRegVisible:false}
                          PropertyChanges {target: footer;backButtonvisible:true; }
                          PropertyChanges {target: centralView;displayViewVisible:true;controlViewVisible:false;sAcycRegVisible:false;statusReg2Visible:true }
                      },
                      State {
                          name: "StatusRegister3View"
                          PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                          PropertyChanges {target: centralView;setTableModeRegVisible:false;trackingModeRegVisible:false;homingModeRegVisible:false;jogginModeRegVisible:false}
                          PropertyChanges {target: footer;backButtonvisible:true; }
                          PropertyChanges {target: centralView;displayViewVisible:true;controlViewVisible:false;sAcycRegVisible:false;statusReg3Visible:true }
                      },
                      State {
                          name: "SOperationModeRegisterView"
                          PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                          PropertyChanges {target: centralView;setTableModeRegVisible:false;trackingModeRegVisible:false;homingModeRegVisible:false;jogginModeRegVisible:false}
                          PropertyChanges {target: footer;backButtonvisible:true; }
                          PropertyChanges {target: centralView;displayViewVisible:true;controlViewVisible:false;sAcycRegVisible:false;sOperationRegVisible:true }
                      },
                      State {
                          name: "SDirectModeRegisterView"
                          PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                          PropertyChanges {target: centralView;setTableModeRegVisible:false;trackingModeRegVisible:false;homingModeRegVisible:false;jogginModeRegVisible:false}
                          PropertyChanges {target: footer;backButtonvisible:true; }
                          PropertyChanges {target: centralView;displayViewVisible:true;controlViewVisible:false;sAcycRegVisible:false;sDirectModeRegVisible:true }
                      },
                      State {
                          name: "SSetTableModeRegisterView"
                          PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                          PropertyChanges {target: centralView;setTableModeRegVisible:false;trackingModeRegVisible:false;homingModeRegVisible:false;jogginModeRegVisible:false}
                          PropertyChanges {target: footer;backButtonvisible:true; }
                          PropertyChanges {target: centralView;displayViewVisible:true;controlViewVisible:false;sAcycRegVisible:false;sSetTableModeRegVisible:true }
                      },
                      State {
                          name: "STrackingModeRegisterView"
                          PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                          PropertyChanges {target: centralView;setTableModeRegVisible:false;trackingModeRegVisible:false;homingModeRegVisible:false;jogginModeRegVisible:false}
                          PropertyChanges {target: footer;backButtonvisible:true; }
                          PropertyChanges {target: centralView;displayViewVisible:true;controlViewVisible:false;sAcycRegVisible:false;sTtrackingModeRegVisible:true }
                      },
                      State {
                          name: "SHomingRegisterView"
                          PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                          PropertyChanges {target: centralView;setTableModeRegVisible:false;trackingModeRegVisible:false;homingModeRegVisible:false;jogginModeRegVisible:false}
                          PropertyChanges {target: footer;backButtonvisible:true; }
                          PropertyChanges {target: centralView;displayViewVisible:true;controlViewVisible:false;sAcycRegVisible:false;sHomingModeRegVisible:true }
                      },
                      State {
                          name: "SJoggingRegisterView"
                          PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                          PropertyChanges {target: centralView;setTableModeRegVisible:false;trackingModeRegVisible:false;homingModeRegVisible:false;jogginModeRegVisible:false}
                          PropertyChanges {target: footer;backButtonvisible:true; }
                          PropertyChanges {target: centralView;displayViewVisible:true;controlViewVisible:false;sAcycRegVisible:false;sJogginModeRegVisible:true }
                      }
                  ]
                  state: "MainView"
                  Connections{
                      target: centralView;
                      onAcyclicButtonClicked:{
                          //                console.log("switching to CyclicRegisterView")
                          mainUI.state="CyclicRegisterView"
          
                      }
                      onControlRegister1ButtonClicked:{
                          //                console.log("switching to Control Register1View")
                          mainUI.state="ControlRegister1View"
                      }
                      onControlRegister2ButtonClicked:{
                          //                console.log("switching to Control Register2View")
                          mainUI.state="ControlRegister2View"
                      }
                      onOperationModeRegisterClicked:{
                          //                console.log("switching to CMODE or operation mode register view")
                          mainUI.state="OperationModeRegisterView"
                      }
                      onDirectModeRegisterClicked:{
                          //                console.log("switching to direct mode register view")
                          mainUI.state="DirectModeRegisterView"
                      }
                      onSetTableModeRegisterClicked:{
                          //                console.log("switching to settable mode register view")
                          mainUI.state="SetTableModeRegisterView"
                      }
                      onTrackingModeRegisterClicked:{
                          //                console.log("switching to trakingmode register view")
                          mainUI.state="TrackingModeRegisterView"
                      }
                      onHomingModeRegisterClicked:{
                          //                console.log("switching to homing register view")
                          mainUI.state="HomingModeRegisterView"
                      }
                      onJoggingModeRegisterClicked:{
                          //                console.log("switching to joggin register view")
                          mainUI.state="JoggingModeRegisterView"
                      }
                      onSAcyclicButtonClicked:{
                          //                console.log("switching to display acyclic register view")
                          mainUI.state="SAcyclicRegisterView"
                      }
                      onSStatusRegister1ButtonClicked:{
                          mainUI.state="StatusRegister1View"
                      }
                      onSStatusRegister2ButtonClicked:{
                          mainUI.state="StatusRegister2View"
                      }
                      onSStatusRegister3ButtonClicked:{
                          mainUI.state="StatusRegister3View"
                      }
                      onSOperationModeRegisterClicked:{
                          mainUI.state="SOperationModeRegisterView"
                      }
                      onSDirectModeRegisterClicked:{
                          mainUI.state="SDirectModeRegisterView"
                      }
                      onSSetTableModeRegisterClicked:{
                          mainUI.state="SSetTableModeRegisterView"
                      }
                      onSTrackingModeRegisterClicked:{
                          mainUI.state="STrackingModeRegisterView"
                      }
                      onSHomingModeRegisterClicked:{
                          mainUI.state="SHomingRegisterView"
                      }
                      onSJoggingModeRegisterClicked:{
                          mainUI.state="SJoggingRegisterView"
                      }
                  }
                  Connections{
                      target: footer
                      onBackButtoncliked:{
                          //                console.log("switching to MainView")
                          mainUI.state="MainView"
                      }
                      onForwardButtonClicked:{
                          mainUI.state="SetTableView"
                      }
                  }
              }
          }
          

          Sorry for the lengthy one. my model is in SetTable.qml

          import QtQuick 2.3
          import QtQuick.Window 2.2
          import QtQuick.Controls 1.3
          import QtQuick.Layouts 1.1
          Rectangle {
              id:root
              anchors.fill: parent
              Row{
                  id:buttons
                  anchors.top: root.top
                  Button{
                      id:addNewRowButton
                      text: "ADD"
                      onClicked: {
                          setTableModel.append({x_position: 0,
                                                   y_position:0,
                                                   z_position:0,
                                                   velocity :0,
                                                   acceleration:0,
                                                   deceleration:0,
                                                   tool:0,
                                                   tracking_x:0,
                                                   tracking_y:0,
                                                   tracking_z:0}
                                               )
                      }
                  }
                  Button{
                      id:deleteRowButton
                      text: "DELETE"
                      onClicked: {
                          setTableModel.remove(setTableView.currentRow)
                      }
                  }
          
              }
              ListModel{
                  id:setTableModel
          
                  ListElement{
                      x_position: 1000
                      y_position: 200
                      z_position: 300
                      velocity: 28
                      acceleration:34
                      deceleration:14
                      tool:1
                      tracking_x: 400
                      tracking_y:500
                      tracking_z:5
                  }
                  ListElement{
                      x_position: 1000
                      y_position: 200
                      z_position: 300
                      velocity: 28
                      acceleration:34
                      deceleration:14
                      tool:1
                      tracking_x: 400
                      tracking_y:500
                      tracking_z:5
                  }
                  ListElement{
                      x_position: 100
                      y_position: 200
                      z_position: 300
                      velocity: 28
                      acceleration:34
                      deceleration:14
                      tool:1
                      tracking_x: 400
                      tracking_y:500
                      tracking_z:555
                  }
              }
          
              TableView{
                  id:setTableView
                  objectName: "setTableView"
                  model: setTableModel
                  width: parent.width
                  height: parent.height-buttons.height
                  Layout.minimumWidth: 400
                  Layout.minimumHeight: 240
                  Layout.preferredWidth: 600
                  Layout.preferredHeight: 400
                  anchors.top: buttons.bottom
                  TableViewColumn {
                      role: "x_position"
                      title: "X mm"
                      width: 80
                  }
                  TableViewColumn {
                      role: "y_position"
                      title: "Y mm"
                      width: 80
                  }
                  TableViewColumn {
                      role: "z_position"
                      title: "Z mm"
                      width: 80
                  }
                  TableViewColumn {
                      role: "velocity"
                      title: "V m/s"
                      width: 80
                  }
                  TableViewColumn {
                      role: "acceleration"
                      title: "A m/s2"
                      width: 80
                  }
                  TableViewColumn {
                      role: "deceleration"
                      title: "D m/s2"
                      width: 80
                  }
                  TableViewColumn {
                      role: "tool"
                      title: "Tool"
                      width: 80
                      delegate:
                          TextInput {
                          anchors.left: parent.left
                          anchors.verticalCenter: parent.verticalCenter
                          renderType: Text.NativeRendering
                          validator: IntValidator {bottom: 0; top: 1;}
                          text: styleData.value
                      }
                  }
          
                  TableViewColumn {
                      role: "tracking_x"
                      title: "Tx mm"
                      width: 80
                  }
                  TableViewColumn {
                      role: "tracking_y"
                      title: "Ty mm"
                      width: 80
                  }
                  TableViewColumn {
                      role: "tracking_z"
                      title: "Tz mm"
                      width: 80
                  }
                  itemDelegate: Item {
                      TextInput {
                          anchors.left: parent.left
                          anchors.verticalCenter: parent.verticalCenter
                          renderType: Text.NativeRendering
                          text: styleData.value
                      }
                  }
              }
          }
          

          But the same piece of code as main.cpp is working fine in another project. I think something is wrong with my main.qml. May i know what's the mistake? Thanks

          p3c0P 1 Reply Last reply
          0
          • vishnuV vishnu

            @p3c0
            main.qml

            import QtQuick 2.3
            import QtQuick.Window 2.2
            import QtQuick.Controls 1.3
            
            Window{
                id:window
                width: Screen.width
                height: Screen.height
                visible: true
            
                Item{
                    id:mainUI
                    anchors.fill: parent
                    Header{
                        id:header
                    }
                    CentralView{
                        id:centralView
                        anchors.top: header.bottom
                        anchors.bottom: footer.top
                    }
                    //Model
                    SetTable{
                        id:setTable
                        anchors.top: header.bottom
                        anchors.bottom: footer.top
                        visible: false
                    }
                    Footer {
                        id: footer
                        anchors.bottom: parent.bottom
                    }
                    states: [
                        State {
                            name: "MainView"
                            PropertyChanges {target: centralView;cycRegVisible:false; ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                            PropertyChanges {target: footer;backButtonvisible:false; }
                        },
                        //setTable view state
                        State {
                            name: "SetTableView"
                            PropertyChanges {target: centralView;centralViewVisible:false;}
                            PropertyChanges {target: setTable;visible:true;}
                            PropertyChanges {target: footer;forwardButtonvisible:false;}
                        },
                        State {
                            name: "CyclicRegisterView"
                            PropertyChanges {target: centralView;cycRegVisible:true }
                            PropertyChanges {target: footer;backButtonvisible:true}
                            PropertyChanges {target: centralView;ctrlReg1Visible:false }
                            PropertyChanges {target: centralView;ctrlReg2Visible:false }
                            PropertyChanges {target: centralView;cmodeRegVisible:false }
                            PropertyChanges {target: centralView;directModeRegVisible:false }
                            PropertyChanges {target: centralView;trackingModeRegVisible:false }
                            PropertyChanges {target: centralView;displayViewVisible:false }
                        },
                        State {
                            name: "ControlRegister1View"
                            PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:true;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                            PropertyChanges {target: centralView;trackingModeRegVisible:false }
                            PropertyChanges {target: footer;backButtonvisible:true; }
                            PropertyChanges {target: centralView;displayViewVisible:false }
                        },
                        State {
                            name: "ControlRegister2View"
                            PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:true;cmodeRegVisible:false;directModeRegVisible:false}
                            PropertyChanges {target: centralView;trackingModeRegVisible:false }
                            PropertyChanges {target: footer;backButtonvisible:true; }
                            PropertyChanges {target: centralView;displayViewVisible:false }
                        },
                        State {
                            name: "OperationModeRegisterView"
                            PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:true;directModeRegVisible:false }
                            PropertyChanges {target: centralView;trackingModeRegVisible:false ;homingModeRegVisible:false}
                            PropertyChanges {target: footer;backButtonvisible:true; }
                            PropertyChanges {target: centralView;displayViewVisible:false }
                        },
                        State {
                            name: "DirectModeRegisterView"
                            PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:true}
                            PropertyChanges {target: centralView;trackingModeRegVisible:false ;homingModeRegVisible:false}
                            PropertyChanges {target: footer;backButtonvisible:true; }
                            PropertyChanges {target: centralView;displayViewVisible:false }
                        },
                        State {
                            name: "SetTableModeRegisterView"
                            PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                            PropertyChanges {target: centralView;setTableModeRegVisible:true;trackingModeRegVisible:false;homingModeRegVisible:false}
                            PropertyChanges {target: footer;backButtonvisible:true; }
                            PropertyChanges {target: centralView;displayViewVisible:false }
                        },
                        State {
                            name: "TrackingModeRegisterView"
                            PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                            PropertyChanges {target: centralView;setTableModeRegVisible:false;trackingModeRegVisible:true;homingModeRegVisible:false}
                            PropertyChanges {target: footer;backButtonvisible:true; }
                            PropertyChanges {target: centralView;displayViewVisible:false }
                        },
                        State {
                            name: "HomingModeRegisterView"
                            PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                            PropertyChanges {target: centralView;setTableModeRegVisible:false;trackingModeRegVisible:false;homingModeRegVisible:true}
                            PropertyChanges {target: footer;backButtonvisible:true; }
                            PropertyChanges {target: centralView;displayViewVisible:false }
                        },
                        State {
                            name: "JoggingModeRegisterView"
                            PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                            PropertyChanges {target: centralView;setTableModeRegVisible:false;trackingModeRegVisible:false;homingModeRegVisible:false;jogginModeRegVisible:true}
                            PropertyChanges {target: footer;backButtonvisible:true; }
                            PropertyChanges {target: centralView;displayViewVisible:false }
                        },
                        State {
                            name: "SAcyclicRegisterView"
                            PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                            PropertyChanges {target: centralView;setTableModeRegVisible:false;trackingModeRegVisible:false;homingModeRegVisible:false;jogginModeRegVisible:false}
                            PropertyChanges {target: footer;backButtonvisible:true; }
                            PropertyChanges {target: centralView;displayViewVisible:true;controlViewVisible:false;sAcycRegVisible:true }
                        },
                        State {
                            name: "StatusRegister1View"
                            PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                            PropertyChanges {target: centralView;setTableModeRegVisible:false;trackingModeRegVisible:false;homingModeRegVisible:false;jogginModeRegVisible:false}
                            PropertyChanges {target: footer;backButtonvisible:true; }
                            PropertyChanges {target: centralView;displayViewVisible:true;controlViewVisible:false;sAcycRegVisible:false;statusReg1Visible:true }
                        },
                        State {
                            name: "StatusRegister2View"
                            PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                            PropertyChanges {target: centralView;setTableModeRegVisible:false;trackingModeRegVisible:false;homingModeRegVisible:false;jogginModeRegVisible:false}
                            PropertyChanges {target: footer;backButtonvisible:true; }
                            PropertyChanges {target: centralView;displayViewVisible:true;controlViewVisible:false;sAcycRegVisible:false;statusReg2Visible:true }
                        },
                        State {
                            name: "StatusRegister3View"
                            PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                            PropertyChanges {target: centralView;setTableModeRegVisible:false;trackingModeRegVisible:false;homingModeRegVisible:false;jogginModeRegVisible:false}
                            PropertyChanges {target: footer;backButtonvisible:true; }
                            PropertyChanges {target: centralView;displayViewVisible:true;controlViewVisible:false;sAcycRegVisible:false;statusReg3Visible:true }
                        },
                        State {
                            name: "SOperationModeRegisterView"
                            PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                            PropertyChanges {target: centralView;setTableModeRegVisible:false;trackingModeRegVisible:false;homingModeRegVisible:false;jogginModeRegVisible:false}
                            PropertyChanges {target: footer;backButtonvisible:true; }
                            PropertyChanges {target: centralView;displayViewVisible:true;controlViewVisible:false;sAcycRegVisible:false;sOperationRegVisible:true }
                        },
                        State {
                            name: "SDirectModeRegisterView"
                            PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                            PropertyChanges {target: centralView;setTableModeRegVisible:false;trackingModeRegVisible:false;homingModeRegVisible:false;jogginModeRegVisible:false}
                            PropertyChanges {target: footer;backButtonvisible:true; }
                            PropertyChanges {target: centralView;displayViewVisible:true;controlViewVisible:false;sAcycRegVisible:false;sDirectModeRegVisible:true }
                        },
                        State {
                            name: "SSetTableModeRegisterView"
                            PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                            PropertyChanges {target: centralView;setTableModeRegVisible:false;trackingModeRegVisible:false;homingModeRegVisible:false;jogginModeRegVisible:false}
                            PropertyChanges {target: footer;backButtonvisible:true; }
                            PropertyChanges {target: centralView;displayViewVisible:true;controlViewVisible:false;sAcycRegVisible:false;sSetTableModeRegVisible:true }
                        },
                        State {
                            name: "STrackingModeRegisterView"
                            PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                            PropertyChanges {target: centralView;setTableModeRegVisible:false;trackingModeRegVisible:false;homingModeRegVisible:false;jogginModeRegVisible:false}
                            PropertyChanges {target: footer;backButtonvisible:true; }
                            PropertyChanges {target: centralView;displayViewVisible:true;controlViewVisible:false;sAcycRegVisible:false;sTtrackingModeRegVisible:true }
                        },
                        State {
                            name: "SHomingRegisterView"
                            PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                            PropertyChanges {target: centralView;setTableModeRegVisible:false;trackingModeRegVisible:false;homingModeRegVisible:false;jogginModeRegVisible:false}
                            PropertyChanges {target: footer;backButtonvisible:true; }
                            PropertyChanges {target: centralView;displayViewVisible:true;controlViewVisible:false;sAcycRegVisible:false;sHomingModeRegVisible:true }
                        },
                        State {
                            name: "SJoggingRegisterView"
                            PropertyChanges {target: centralView;cycRegVisible:false;ctrlReg1Visible:false;ctrlReg2Visible:false;cmodeRegVisible:false;directModeRegVisible:false}
                            PropertyChanges {target: centralView;setTableModeRegVisible:false;trackingModeRegVisible:false;homingModeRegVisible:false;jogginModeRegVisible:false}
                            PropertyChanges {target: footer;backButtonvisible:true; }
                            PropertyChanges {target: centralView;displayViewVisible:true;controlViewVisible:false;sAcycRegVisible:false;sJogginModeRegVisible:true }
                        }
                    ]
                    state: "MainView"
                    Connections{
                        target: centralView;
                        onAcyclicButtonClicked:{
                            //                console.log("switching to CyclicRegisterView")
                            mainUI.state="CyclicRegisterView"
            
                        }
                        onControlRegister1ButtonClicked:{
                            //                console.log("switching to Control Register1View")
                            mainUI.state="ControlRegister1View"
                        }
                        onControlRegister2ButtonClicked:{
                            //                console.log("switching to Control Register2View")
                            mainUI.state="ControlRegister2View"
                        }
                        onOperationModeRegisterClicked:{
                            //                console.log("switching to CMODE or operation mode register view")
                            mainUI.state="OperationModeRegisterView"
                        }
                        onDirectModeRegisterClicked:{
                            //                console.log("switching to direct mode register view")
                            mainUI.state="DirectModeRegisterView"
                        }
                        onSetTableModeRegisterClicked:{
                            //                console.log("switching to settable mode register view")
                            mainUI.state="SetTableModeRegisterView"
                        }
                        onTrackingModeRegisterClicked:{
                            //                console.log("switching to trakingmode register view")
                            mainUI.state="TrackingModeRegisterView"
                        }
                        onHomingModeRegisterClicked:{
                            //                console.log("switching to homing register view")
                            mainUI.state="HomingModeRegisterView"
                        }
                        onJoggingModeRegisterClicked:{
                            //                console.log("switching to joggin register view")
                            mainUI.state="JoggingModeRegisterView"
                        }
                        onSAcyclicButtonClicked:{
                            //                console.log("switching to display acyclic register view")
                            mainUI.state="SAcyclicRegisterView"
                        }
                        onSStatusRegister1ButtonClicked:{
                            mainUI.state="StatusRegister1View"
                        }
                        onSStatusRegister2ButtonClicked:{
                            mainUI.state="StatusRegister2View"
                        }
                        onSStatusRegister3ButtonClicked:{
                            mainUI.state="StatusRegister3View"
                        }
                        onSOperationModeRegisterClicked:{
                            mainUI.state="SOperationModeRegisterView"
                        }
                        onSDirectModeRegisterClicked:{
                            mainUI.state="SDirectModeRegisterView"
                        }
                        onSSetTableModeRegisterClicked:{
                            mainUI.state="SSetTableModeRegisterView"
                        }
                        onSTrackingModeRegisterClicked:{
                            mainUI.state="STrackingModeRegisterView"
                        }
                        onSHomingModeRegisterClicked:{
                            mainUI.state="SHomingRegisterView"
                        }
                        onSJoggingModeRegisterClicked:{
                            mainUI.state="SJoggingRegisterView"
                        }
                    }
                    Connections{
                        target: footer
                        onBackButtoncliked:{
                            //                console.log("switching to MainView")
                            mainUI.state="MainView"
                        }
                        onForwardButtonClicked:{
                            mainUI.state="SetTableView"
                        }
                    }
                }
            }
            

            Sorry for the lengthy one. my model is in SetTable.qml

            import QtQuick 2.3
            import QtQuick.Window 2.2
            import QtQuick.Controls 1.3
            import QtQuick.Layouts 1.1
            Rectangle {
                id:root
                anchors.fill: parent
                Row{
                    id:buttons
                    anchors.top: root.top
                    Button{
                        id:addNewRowButton
                        text: "ADD"
                        onClicked: {
                            setTableModel.append({x_position: 0,
                                                     y_position:0,
                                                     z_position:0,
                                                     velocity :0,
                                                     acceleration:0,
                                                     deceleration:0,
                                                     tool:0,
                                                     tracking_x:0,
                                                     tracking_y:0,
                                                     tracking_z:0}
                                                 )
                        }
                    }
                    Button{
                        id:deleteRowButton
                        text: "DELETE"
                        onClicked: {
                            setTableModel.remove(setTableView.currentRow)
                        }
                    }
            
                }
                ListModel{
                    id:setTableModel
            
                    ListElement{
                        x_position: 1000
                        y_position: 200
                        z_position: 300
                        velocity: 28
                        acceleration:34
                        deceleration:14
                        tool:1
                        tracking_x: 400
                        tracking_y:500
                        tracking_z:5
                    }
                    ListElement{
                        x_position: 1000
                        y_position: 200
                        z_position: 300
                        velocity: 28
                        acceleration:34
                        deceleration:14
                        tool:1
                        tracking_x: 400
                        tracking_y:500
                        tracking_z:5
                    }
                    ListElement{
                        x_position: 100
                        y_position: 200
                        z_position: 300
                        velocity: 28
                        acceleration:34
                        deceleration:14
                        tool:1
                        tracking_x: 400
                        tracking_y:500
                        tracking_z:555
                    }
                }
            
                TableView{
                    id:setTableView
                    objectName: "setTableView"
                    model: setTableModel
                    width: parent.width
                    height: parent.height-buttons.height
                    Layout.minimumWidth: 400
                    Layout.minimumHeight: 240
                    Layout.preferredWidth: 600
                    Layout.preferredHeight: 400
                    anchors.top: buttons.bottom
                    TableViewColumn {
                        role: "x_position"
                        title: "X mm"
                        width: 80
                    }
                    TableViewColumn {
                        role: "y_position"
                        title: "Y mm"
                        width: 80
                    }
                    TableViewColumn {
                        role: "z_position"
                        title: "Z mm"
                        width: 80
                    }
                    TableViewColumn {
                        role: "velocity"
                        title: "V m/s"
                        width: 80
                    }
                    TableViewColumn {
                        role: "acceleration"
                        title: "A m/s2"
                        width: 80
                    }
                    TableViewColumn {
                        role: "deceleration"
                        title: "D m/s2"
                        width: 80
                    }
                    TableViewColumn {
                        role: "tool"
                        title: "Tool"
                        width: 80
                        delegate:
                            TextInput {
                            anchors.left: parent.left
                            anchors.verticalCenter: parent.verticalCenter
                            renderType: Text.NativeRendering
                            validator: IntValidator {bottom: 0; top: 1;}
                            text: styleData.value
                        }
                    }
            
                    TableViewColumn {
                        role: "tracking_x"
                        title: "Tx mm"
                        width: 80
                    }
                    TableViewColumn {
                        role: "tracking_y"
                        title: "Ty mm"
                        width: 80
                    }
                    TableViewColumn {
                        role: "tracking_z"
                        title: "Tz mm"
                        width: 80
                    }
                    itemDelegate: Item {
                        TextInput {
                            anchors.left: parent.left
                            anchors.verticalCenter: parent.verticalCenter
                            renderType: Text.NativeRendering
                            text: styleData.value
                        }
                    }
                }
            }
            

            But the same piece of code as main.cpp is working fine in another project. I think something is wrong with my main.qml. May i know what's the mistake? Thanks

            p3c0P Offline
            p3c0P Offline
            p3c0
            Moderators
            wrote on last edited by
            #16

            @vishnu No idea. Seems closer to this QTBUG-44859.
            Can you try trimming down the main.qml i.e removing some component and then executing ?

            157

            vishnuV 1 Reply Last reply
            0
            • p3c0P p3c0

              @vishnu No idea. Seems closer to this QTBUG-44859.
              Can you try trimming down the main.qml i.e removing some component and then executing ?

              vishnuV Offline
              vishnuV Offline
              vishnu
              wrote on last edited by
              #17

              @p3c0
              Okay, Any other way to access the TableView model in C++ side?

              p3c0P 1 Reply Last reply
              0
              • vishnuV vishnu

                @p3c0
                Okay, Any other way to access the TableView model in C++ side?

                p3c0P Offline
                p3c0P Offline
                p3c0
                Moderators
                wrote on last edited by
                #18

                @vishnu AFAIK. no. But that error is not related to TableView or ListModel.

                157

                vishnuV 1 Reply Last reply
                0
                • p3c0P p3c0

                  @vishnu AFAIK. no. But that error is not related to TableView or ListModel.

                  vishnuV Offline
                  vishnuV Offline
                  vishnu
                  wrote on last edited by vishnu
                  #19

                  @p3c0
                  Got it.The error was due to the wrong import statement in qml.
                  Now How do I capture the changes?
                  If reading the entire model is the solution (ofcourse not efficient).
                  How can I call this public slot getModel when ever there is a change in TableView in qml? What is the signal I get from the model/view which tells me that there is a change ?

                  void TCPCommunicationPort::getModel(QQmlApplicationEngine &engine)
                  {
                      QObject* root = engine.rootObjects().first(); //get the root object as usual
                      QObject* list = root->findChild<QObject*>("setTableView"); //get the ListView
                  
                      QVariant qmlmodel = list->property("model"); //access model property of ListView
                      QAbstractListModel *model = qvariant_cast<QAbstractListModel *>(qmlmodel); //convert to QAbstractListModel
                  .....//data is handled here
                  
                  p3c0P 1 Reply Last reply
                  0
                  • vishnuV vishnu

                    @p3c0
                    Got it.The error was due to the wrong import statement in qml.
                    Now How do I capture the changes?
                    If reading the entire model is the solution (ofcourse not efficient).
                    How can I call this public slot getModel when ever there is a change in TableView in qml? What is the signal I get from the model/view which tells me that there is a change ?

                    void TCPCommunicationPort::getModel(QQmlApplicationEngine &engine)
                    {
                        QObject* root = engine.rootObjects().first(); //get the root object as usual
                        QObject* list = root->findChild<QObject*>("setTableView"); //get the ListView
                    
                        QVariant qmlmodel = list->property("model"); //access model property of ListView
                        QAbstractListModel *model = qvariant_cast<QAbstractListModel *>(qmlmodel); //convert to QAbstractListModel
                    .....//data is handled here
                    
                    p3c0P Offline
                    p3c0P Offline
                    p3c0
                    Moderators
                    wrote on last edited by p3c0
                    #20

                    @vishnu As we casted it to QAbstractListModel we can connect to its signal dataChanged from C++. Thus when anything changes the slot will be called.

                    QAbstractListModel *model = qvariant_cast<QAbstractListModel *>(qmlmodel);
                    QObject::connect(model,SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)),
                                         &myclass,SLOT(onDataChanged(QModelIndex,QModelIndex,QVector<int>)));
                    

                    Access the changed data in slot

                    void MyClass::onDataChanged(const QModelIndex &topLeft, 
                                 const QModelIndex &bottomRight, const QVector<int> &roles)
                    {
                        qDebug() << "Data Changed :" << topLeft.data(roles[0]) << topLeft.data(roles[1]);
                    }
                    

                    157

                    vishnuV 1 Reply Last reply
                    0
                    • p3c0P p3c0

                      @vishnu As we casted it to QAbstractListModel we can connect to its signal dataChanged from C++. Thus when anything changes the slot will be called.

                      QAbstractListModel *model = qvariant_cast<QAbstractListModel *>(qmlmodel);
                      QObject::connect(model,SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)),
                                           &myclass,SLOT(onDataChanged(QModelIndex,QModelIndex,QVector<int>)));
                      

                      Access the changed data in slot

                      void MyClass::onDataChanged(const QModelIndex &topLeft, 
                                   const QModelIndex &bottomRight, const QVector<int> &roles)
                      {
                          qDebug() << "Data Changed :" << topLeft.data(roles[0]) << topLeft.data(roles[1]);
                      }
                      
                      vishnuV Offline
                      vishnuV Offline
                      vishnu
                      wrote on last edited by vishnu
                      #21

                      @p3c0
                      I don't know why but the SLOT is not called when the data changes.
                      I did the connection in main itself.
                      main.qml

                      QQmlApplicationEngine engine;
                          TCPCommunicationPort tcpCommunicationPort;
                          auto root_context = engine.rootContext();
                          root_context->setContextProperty("tcpCommunicationPort",&tcpCommunicationPort);
                          engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
                      //    tcpCommunicationPort.getModel(engine);
                          QObject* root = engine.rootObjects().first(); //get the root object as usual
                          QObject* list = root->findChild<QObject*>("setTableView"); //get the ListView
                      
                          QVariant qmlmodel = list->property("model"); //access model property of ListView
                          QAbstractListModel *model = qvariant_cast<QAbstractListModel *>(qmlmodel); //convert to QAbstractListModel
                      
                          QObject::connect(model,SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)),
                                               &tcpCommunicationPort,SLOT(onDataChanged(QModelIndex,QModelIndex,QVector<int>)));
                      

                      In header file

                      public slots:
                      void onDataChanged(const QModelIndex &topLeft,
                                                  const QModelIndex &bottomRight, const QVector<int> &roles);
                      

                      May i know why the slot is not called?I even don't know whether the signal is raised or not.How to know whether the signal is emitted not in this case?

                      p3c0P 1 Reply Last reply
                      0
                      • vishnuV vishnu

                        @p3c0
                        I don't know why but the SLOT is not called when the data changes.
                        I did the connection in main itself.
                        main.qml

                        QQmlApplicationEngine engine;
                            TCPCommunicationPort tcpCommunicationPort;
                            auto root_context = engine.rootContext();
                            root_context->setContextProperty("tcpCommunicationPort",&tcpCommunicationPort);
                            engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
                        //    tcpCommunicationPort.getModel(engine);
                            QObject* root = engine.rootObjects().first(); //get the root object as usual
                            QObject* list = root->findChild<QObject*>("setTableView"); //get the ListView
                        
                            QVariant qmlmodel = list->property("model"); //access model property of ListView
                            QAbstractListModel *model = qvariant_cast<QAbstractListModel *>(qmlmodel); //convert to QAbstractListModel
                        
                            QObject::connect(model,SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)),
                                                 &tcpCommunicationPort,SLOT(onDataChanged(QModelIndex,QModelIndex,QVector<int>)));
                        

                        In header file

                        public slots:
                        void onDataChanged(const QModelIndex &topLeft,
                                                    const QModelIndex &bottomRight, const QVector<int> &roles);
                        

                        May i know why the slot is not called?I even don't know whether the signal is raised or not.How to know whether the signal is emitted not in this case?

                        p3c0P Offline
                        p3c0P Offline
                        p3c0
                        Moderators
                        wrote on last edited by p3c0
                        #22

                        @vishnu

                        May i know why the slot is not called?I even don't know whether the signal is raised or not.How to know whether the signal is emitted not in this case?

                        Since you are using ListModel use onDataChanged signal handler.

                        ListModel {
                            id: myModel
                        
                            onDataChanged: console.log("Data Changed")
                        }
                        

                        thus verify whether the data is changed.

                        157

                        vishnuV 1 Reply Last reply
                        0
                        • p3c0P p3c0

                          @vishnu

                          May i know why the slot is not called?I even don't know whether the signal is raised or not.How to know whether the signal is emitted not in this case?

                          Since you are using ListModel use onDataChanged signal handler.

                          ListModel {
                              id: myModel
                          
                              onDataChanged: console.log("Data Changed")
                          }
                          

                          thus verify whether the data is changed.

                          vishnuV Offline
                          vishnuV Offline
                          vishnu
                          wrote on last edited by vishnu
                          #23

                          @p3c0
                          nice hint. unfortunatelly onDataChanged singal is not emitted. when ever I am changing data,adding new row. That means problem is on my QML side.Again this is code for my model,View:
                          setTable.qml

                          import QtQuick 2.3
                          import QtQuick.Window 2.2
                          import QtQuick.Controls 1.3
                          import QtQuick.Layouts 1.1
                          Rectangle {
                              id:root
                              anchors.fill: parent
                              Row{
                                  id:buttons
                                  anchors.top: root.top
                                  Button{
                                      id:addNewRowButton
                                      text: "ADD"
                                      onClicked: {
                                          setTableModel.append({x_position: 0,
                                                                   y_position:0,
                                                                   z_position:0,
                                                                   velocity :0,
                                                                   acceleration:0,
                                                                   deceleration:0,
                                                                   tool:0,
                                                                   tracking_x:0,
                                                                   tracking_y:0,
                                                                   tracking_z:0}
                                                               )
                                      }
                                  }
                                  Button{
                                      id:deleteRowButton
                                      text: "DELETE"
                                      onClicked: {
                                          setTableModel.remove(setTableView.currentRow)
                                      }
                                  }
                          
                              }
                              ListModel{
                                  id:setTableModel
                          
                                  ListElement{
                                      x_position: 0
                                      y_position: 300
                                      z_position: 500
                                      velocity: 100
                                      acceleration:100
                                      deceleration:0
                                      tool:0
                                      tracking_x: 0
                                      tracking_y:0
                                      tracking_z:0
                                  }
                                  onDataChanged: {
                                      console.log("Data changed")
                                  }
                              }
                          
                              TableView{
                                  id:setTableView
                                  objectName: "setTableView"
                                  model: setTableModel
                                  width: parent.width
                                  height: parent.height-buttons.height
                                  Layout.minimumWidth: 400
                                  Layout.minimumHeight: 240
                                  Layout.preferredWidth: 600
                                  Layout.preferredHeight: 400
                                  anchors.top: buttons.bottom
                                  TableViewColumn {
                                      role: "x_position"
                                      title: "X mm"
                                      width: 80
                                  }
                                  TableViewColumn {
                                      role: "y_position"
                                      title: "Y mm"
                                      width: 80
                                  }
                                  TableViewColumn {
                                      role: "z_position"
                                      title: "Z mm"
                                      width: 80
                                  }
                                  TableViewColumn {
                                      role: "velocity"
                                      title: "V m/s"
                                      width: 80
                                  }
                                  TableViewColumn {
                                      role: "acceleration"
                                      title: "A m/s2"
                                      width: 80
                                  }
                                  TableViewColumn {
                                      role: "deceleration"
                                      title: "D m/s2"
                                      width: 80
                                  }
                                  TableViewColumn {
                                      role: "tool"
                                      title: "Tool"
                                      width: 80
                                      delegate:
                                          TextInput {
                                          anchors.left: parent.left
                                          anchors.verticalCenter: parent.verticalCenter
                                          renderType: Text.NativeRendering
                                          validator: IntValidator {bottom: 0; top: 1;}
                                          text: styleData.value
                                      }
                                  }
                                  TableViewColumn {
                                      role: "tracking_x"
                                      title: "Tx mm"
                                      width: 80
                                  }
                                  TableViewColumn {
                                      role: "tracking_y"
                                      title: "Ty mm"
                                      width: 80
                                  }
                                  TableViewColumn {
                                      role: "tracking_z"
                                      title: "Tz mm"
                                      width: 80
                                  }
                                  itemDelegate: Item {
                                      TextInput {
                                          anchors.left: parent.left
                                          anchors.verticalCenter: parent.verticalCenter
                                          renderType: Text.NativeRendering
                                          text: styleData.value
                                      }
                                  }
                              }
                          }
                          
                          p3c0P 1 Reply Last reply
                          0
                          • vishnuV vishnu

                            @p3c0
                            nice hint. unfortunatelly onDataChanged singal is not emitted. when ever I am changing data,adding new row. That means problem is on my QML side.Again this is code for my model,View:
                            setTable.qml

                            import QtQuick 2.3
                            import QtQuick.Window 2.2
                            import QtQuick.Controls 1.3
                            import QtQuick.Layouts 1.1
                            Rectangle {
                                id:root
                                anchors.fill: parent
                                Row{
                                    id:buttons
                                    anchors.top: root.top
                                    Button{
                                        id:addNewRowButton
                                        text: "ADD"
                                        onClicked: {
                                            setTableModel.append({x_position: 0,
                                                                     y_position:0,
                                                                     z_position:0,
                                                                     velocity :0,
                                                                     acceleration:0,
                                                                     deceleration:0,
                                                                     tool:0,
                                                                     tracking_x:0,
                                                                     tracking_y:0,
                                                                     tracking_z:0}
                                                                 )
                                        }
                                    }
                                    Button{
                                        id:deleteRowButton
                                        text: "DELETE"
                                        onClicked: {
                                            setTableModel.remove(setTableView.currentRow)
                                        }
                                    }
                            
                                }
                                ListModel{
                                    id:setTableModel
                            
                                    ListElement{
                                        x_position: 0
                                        y_position: 300
                                        z_position: 500
                                        velocity: 100
                                        acceleration:100
                                        deceleration:0
                                        tool:0
                                        tracking_x: 0
                                        tracking_y:0
                                        tracking_z:0
                                    }
                                    onDataChanged: {
                                        console.log("Data changed")
                                    }
                                }
                            
                                TableView{
                                    id:setTableView
                                    objectName: "setTableView"
                                    model: setTableModel
                                    width: parent.width
                                    height: parent.height-buttons.height
                                    Layout.minimumWidth: 400
                                    Layout.minimumHeight: 240
                                    Layout.preferredWidth: 600
                                    Layout.preferredHeight: 400
                                    anchors.top: buttons.bottom
                                    TableViewColumn {
                                        role: "x_position"
                                        title: "X mm"
                                        width: 80
                                    }
                                    TableViewColumn {
                                        role: "y_position"
                                        title: "Y mm"
                                        width: 80
                                    }
                                    TableViewColumn {
                                        role: "z_position"
                                        title: "Z mm"
                                        width: 80
                                    }
                                    TableViewColumn {
                                        role: "velocity"
                                        title: "V m/s"
                                        width: 80
                                    }
                                    TableViewColumn {
                                        role: "acceleration"
                                        title: "A m/s2"
                                        width: 80
                                    }
                                    TableViewColumn {
                                        role: "deceleration"
                                        title: "D m/s2"
                                        width: 80
                                    }
                                    TableViewColumn {
                                        role: "tool"
                                        title: "Tool"
                                        width: 80
                                        delegate:
                                            TextInput {
                                            anchors.left: parent.left
                                            anchors.verticalCenter: parent.verticalCenter
                                            renderType: Text.NativeRendering
                                            validator: IntValidator {bottom: 0; top: 1;}
                                            text: styleData.value
                                        }
                                    }
                                    TableViewColumn {
                                        role: "tracking_x"
                                        title: "Tx mm"
                                        width: 80
                                    }
                                    TableViewColumn {
                                        role: "tracking_y"
                                        title: "Ty mm"
                                        width: 80
                                    }
                                    TableViewColumn {
                                        role: "tracking_z"
                                        title: "Tz mm"
                                        width: 80
                                    }
                                    itemDelegate: Item {
                                        TextInput {
                                            anchors.left: parent.left
                                            anchors.verticalCenter: parent.verticalCenter
                                            renderType: Text.NativeRendering
                                            text: styleData.value
                                        }
                                    }
                                }
                            }
                            
                            p3c0P Offline
                            p3c0P Offline
                            p3c0
                            Moderators
                            wrote on last edited by
                            #24

                            @vishnu AFAICS You are just adding and removing the data but not updating it. In this case dataChanged wont be called.

                            157

                            vishnuV 1 Reply Last reply
                            0
                            • p3c0P p3c0

                              @vishnu AFAICS You are just adding and removing the data but not updating it. In this case dataChanged wont be called.

                              vishnuV Offline
                              vishnuV Offline
                              vishnu
                              wrote on last edited by
                              #25

                              @p3c0
                              Any hint or example on how to update the data? Thanks a lot

                              p3c0P 1 Reply Last reply
                              0
                              • vishnuV vishnu

                                @p3c0
                                Any hint or example on how to update the data? Thanks a lot

                                p3c0P Offline
                                p3c0P Offline
                                p3c0
                                Moderators
                                wrote on last edited by
                                #26

                                @vishnu Make use rowsInserted of rowsRemoved signals. Connect them to their respective slots as shown previously for dataChanged.

                                157

                                vishnuV 1 Reply Last reply
                                0
                                • p3c0P p3c0

                                  @vishnu Make use rowsInserted of rowsRemoved signals. Connect them to their respective slots as shown previously for dataChanged.

                                  vishnuV Offline
                                  vishnuV Offline
                                  vishnu
                                  wrote on last edited by
                                  #27

                                  @p3c0
                                  I have already added 3 rows with default value. when ever I change default value to someother value. I am not getting the updated value to c++ side.
                                  QObject::connect(model,SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)), &myclass,SLOT(onDataChanged(QModelIndex,QModelIndex,QVector<int>)));
                                  This is not working? As you said since I am not updating the model, just appending and removing the rows.I feel like there has to be done more in my QML part.May I know what is wrong or missing in my Model and View (QML) ?Thanks

                                  p3c0P 1 Reply Last reply
                                  0
                                  • vishnuV vishnu

                                    @p3c0
                                    I have already added 3 rows with default value. when ever I change default value to someother value. I am not getting the updated value to c++ side.
                                    QObject::connect(model,SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)), &myclass,SLOT(onDataChanged(QModelIndex,QModelIndex,QVector<int>)));
                                    This is not working? As you said since I am not updating the model, just appending and removing the rows.I feel like there has to be done more in my QML part.May I know what is wrong or missing in my Model and View (QML) ?Thanks

                                    p3c0P Offline
                                    p3c0P Offline
                                    p3c0
                                    Moderators
                                    wrote on last edited by
                                    #28

                                    @vishnu

                                    I have already added 3 rows with default value. when ever I change default value to someother value. I am not getting the updated value to c++ side.

                                    how are you changing the default value ?

                                    157

                                    vishnuV 1 Reply Last reply
                                    0
                                    • p3c0P p3c0

                                      @vishnu

                                      I have already added 3 rows with default value. when ever I change default value to someother value. I am not getting the updated value to c++ side.

                                      how are you changing the default value ?

                                      vishnuV Offline
                                      vishnuV Offline
                                      vishnu
                                      wrote on last edited by
                                      #29

                                      @p3c0
                                      I can change my default values because my delegate is a TextInput.

                                       TableViewColumn {
                                                  role: "tool"
                                                  title: "Tool"
                                                  width: 80
                                                  delegate:
                                                      TextInput {
                                                      anchors.left: parent.left
                                                      anchors.verticalCenter: parent.verticalCenter
                                                      renderType: Text.NativeRendering
                                                      validator: IntValidator {bottom: 0; top: 1;}
                                                      text: styleData.value
                                                  }
                                              }
                                      
                                      p3c0P 1 Reply Last reply
                                      0
                                      • vishnuV vishnu

                                        @p3c0
                                        I can change my default values because my delegate is a TextInput.

                                         TableViewColumn {
                                                    role: "tool"
                                                    title: "Tool"
                                                    width: 80
                                                    delegate:
                                                        TextInput {
                                                        anchors.left: parent.left
                                                        anchors.verticalCenter: parent.verticalCenter
                                                        renderType: Text.NativeRendering
                                                        validator: IntValidator {bottom: 0; top: 1;}
                                                        text: styleData.value
                                                    }
                                                }
                                        
                                        p3c0P Offline
                                        p3c0P Offline
                                        p3c0
                                        Moderators
                                        wrote on last edited by p3c0
                                        #30

                                        @vishnu Im asking how do you change the items added in ListModel ? That signal will only be updated only when you update the existing items in the model.
                                        For eg:

                                        ListModel {
                                            id: myModel
                                        
                                            ListElement {
                                                name: "abc"
                                                age: 12
                                            }
                                        
                                            onDataChanged: console.log("Changed")
                                        }
                                        
                                        //updating the list model
                                        myModel.set(0, { "name" : "xyz" } )
                                        

                                        So here the signal dataChanged will be triggered and hence the slot onDataChanged in QML will be invoked. Same will work for C++ slot too.

                                        Now in your earlier code you are just adding and removing the rows so those signals (mentioned earlier) will be triggered.

                                        157

                                        vishnuV 1 Reply Last reply
                                        0
                                        • p3c0P p3c0

                                          @vishnu Im asking how do you change the items added in ListModel ? That signal will only be updated only when you update the existing items in the model.
                                          For eg:

                                          ListModel {
                                              id: myModel
                                          
                                              ListElement {
                                                  name: "abc"
                                                  age: 12
                                              }
                                          
                                              onDataChanged: console.log("Changed")
                                          }
                                          
                                          //updating the list model
                                          myModel.set(0, { "name" : "xyz" } )
                                          

                                          So here the signal dataChanged will be triggered and hence the slot onDataChanged in QML will be invoked. Same will work for C++ slot too.

                                          Now in your earlier code you are just adding and removing the rows so those signals (mentioned earlier) will be triggered.

                                          vishnuV Offline
                                          vishnuV Offline
                                          vishnu
                                          wrote on last edited by
                                          #31

                                          @p3c0
                                          I am no where doing that kind of updating. I am assuming that ListModel.append method does updating the model as well as view.

                                          Button{
                                                          id:addNewRowButton
                                                          text: "ADD"
                                                          onClicked: {
                                                              setTableModel.append({"x_position": 0,
                                                                                       "y_position":0,
                                                                                       "z_position":0,
                                                                                       "velocity":0,
                                                                                       "acceleration":0,
                                                                                       "deceleration":0,
                                                                                       "tool":0,
                                                                                       "tracking_x":0,
                                                                                       "tracking_y":0,
                                                                                       "tracking_z":0}
                                                                                   )
                                                          }
                                                      }
                                          
                                          p3c0P 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