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 16.0k 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.
  • 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
                                    • vishnuV vishnu

                                      @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 Offline
                                      p3c0P Offline
                                      p3c0
                                      Moderators
                                      wrote on last edited by
                                      #32

                                      @vishnu No that is not updating. That wont invoke the data changed signal.
                                      As said earlier if you use append or remove use rowsInserted or rowsRemoved signals repectively.

                                      157

                                      vishnuV 1 Reply Last reply
                                      0
                                      • p3c0P p3c0

                                        @vishnu No that is not updating. That wont invoke the data changed signal.
                                        As said earlier if you use append or remove use rowsInserted or rowsRemoved signals repectively.

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

                                        @p3c0
                                        you are right. This works perfect. I can see the data in c++ when ever a new row is added.

                                         QObject::connect(model,SIGNAL(rowsInserted(QModelIndex,int,int)),
                                                                 &tcpCommunicationPort,SLOT(onRowsInserted(QModelIndex,int,int)));
                                        

                                        But when one of item in the Row is changed I can't see the new data in c++.So that means only Set/setproperty of ListModel will invoke the data changed signal. That mean My qml code is wrong if i want dataChangedsignal.
                                        I changed my TableView like this:

                                        TableView{
                                                    id:setTableView
                                                    objectName: "setTableView"
                                                    model: {
                                                         setTableModel.set(0,{"x_position": 0,
                                                                               "y_position":300,
                                                                               "z_position":500,
                                                                               "velocity":0,
                                                                               "acceleration":0,
                                                                               "deceleration":0,
                                                                               "tool":0,
                                                                               "tracking_x":0,
                                                                               "tracking_y":0,
                                                                               "tracking_z":0});
                                                        setTableModel.set(1,{"x_position": 0,
                                                                              "y_position":400,
                                                                              "z_position":800,
                                                                              "velocity":0,
                                                                              "acceleration":0,
                                                                              "deceleration":0,
                                                                              "tool":0,
                                                                              "tracking_x":0,
                                                                              "tracking_y":0,
                                                                              "tracking_z":0})
                                                    }
                                        

                                        Now the entire view if gone. I cannot add anymore rows.That means what I have done is wrong.But don't know what to do.
                                        Also If the user changes some value in any of the times.how can i know which value is changed? TableView has onClicked signal I can get the current row ,and delegate has access to the properties styleData.row - the index of the row ; styleData.column - the index of the column. Don't know how to make use of them.
                                        Can you please tell me what exactly have to be done on my QML side. Should i change my delegate or View or Model code?Thanks.

                                        p3c0P 1 Reply Last reply
                                        0
                                        • vishnuV vishnu

                                          @p3c0
                                          you are right. This works perfect. I can see the data in c++ when ever a new row is added.

                                           QObject::connect(model,SIGNAL(rowsInserted(QModelIndex,int,int)),
                                                                   &tcpCommunicationPort,SLOT(onRowsInserted(QModelIndex,int,int)));
                                          

                                          But when one of item in the Row is changed I can't see the new data in c++.So that means only Set/setproperty of ListModel will invoke the data changed signal. That mean My qml code is wrong if i want dataChangedsignal.
                                          I changed my TableView like this:

                                          TableView{
                                                      id:setTableView
                                                      objectName: "setTableView"
                                                      model: {
                                                           setTableModel.set(0,{"x_position": 0,
                                                                                 "y_position":300,
                                                                                 "z_position":500,
                                                                                 "velocity":0,
                                                                                 "acceleration":0,
                                                                                 "deceleration":0,
                                                                                 "tool":0,
                                                                                 "tracking_x":0,
                                                                                 "tracking_y":0,
                                                                                 "tracking_z":0});
                                                          setTableModel.set(1,{"x_position": 0,
                                                                                "y_position":400,
                                                                                "z_position":800,
                                                                                "velocity":0,
                                                                                "acceleration":0,
                                                                                "deceleration":0,
                                                                                "tool":0,
                                                                                "tracking_x":0,
                                                                                "tracking_y":0,
                                                                                "tracking_z":0})
                                                      }
                                          

                                          Now the entire view if gone. I cannot add anymore rows.That means what I have done is wrong.But don't know what to do.
                                          Also If the user changes some value in any of the times.how can i know which value is changed? TableView has onClicked signal I can get the current row ,and delegate has access to the properties styleData.row - the index of the row ; styleData.column - the index of the column. Don't know how to make use of them.
                                          Can you please tell me what exactly have to be done on my QML side. Should i change my delegate or View or Model code?Thanks.

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

                                          @vishnu Keep your code with append and remove as it is. It just adds and removes the rows. Now to update the already added elements in ListModel use set.
                                          So,

                                          append -> rowsInserted
                                          remove -> rowsRemoved
                                          update i.e set -> dataChanged
                                          

                                          157

                                          vishnuV 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