[solved] Newbie is confused.How to add dynamic data to TableView and parse through it send data to c++
-
@p3c0
I just tried in main.cpp but I ended with the following error.ASSERT: "!isEmpty()" in file ....\Qt\Qt5.4.1\5.4\mingw491_32\include/QtCore/qlist.h, line 292
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.Main.cpp
int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQmlApplicationEngine engine; SetTableDataHandling setTableDataHandling; auto root_context = engine.rootContext(); root_context->setContextProperty("SetTableDataHandling",&setTableDataHandling); //******** QObject* root = engine.rootObjects().first(); // 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 // int rows = model->rowCount(); //get number of rows from model // //iterate through the model // for (int i = 0; i<rows; i++) { // for(int j = 0; j<model->roleNames().count(); j++) { //get the roles count // qDebug() << model->index(i, 0).data(j); //get the actual data using roles // } // } // engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); return app.exec(); }
-
@vishnu
QObject* root = engine.rootObjects().first();
do this after loading the QML.But how do i get engine which is instanstiated in main.cpp to the function where I have to handle the data? Because engine is not declared in this scope right? Thanks
Pass the pointer or reference of engine to that function.
-
@p3c0
Man!!! you're are awesome awesomeeeee!!!! Thanks a lot. -
@p3c0
May I know why the roles and data are in reverse order?
What i get is:
"tracking_z"
"tracking_y"
"tracking_x"
"deceleration"
"velocity"
"z_position"
"y_position"
"x_position"
But it should be in reverse order.
what i expect the data at
qDebug() << model->index(i, 0).data(j)
is the first row and first column from left side of TableView. But It is starting from right side. How do I make it correct?Thanks -
@vishnu That is completely internal. The processing of roles and properties by the engine cannot be controlled.
To correct it the only way is to read the properties in reverse order in the loop :) -
@p3c0
I am still getting the error.
ASSERT: "!isEmpty()" in file ......\Qt5.4.1\5.4\mingw491_32\include/QtCore/qlist.h, line 292
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.
My main.cpp:int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQmlApplicationEngine engine; TCPCommunicationPort tcpCommunicationPort; auto root_context = engine.rootContext(); root_context->setContextProperty("tcpCommunicationPort",&tcpCommunicationPort); engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); QObject* root = engine.rootObjects().first();// error at this point return app.exec(); }
The same main code was working fine in another project but When i copied the same in new project it's again saying the same error. I have loaded main.qml before
QObject* root = engine.rootObjects().first();
May i know what's the mistake? -
@vishnu Can you post the QML part ? i.e
main.qml
-
@p3c0
main.qmlimport 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
-
@vishnu No idea. Seems closer to this QTBUG-44859.
Can you try trimming down themain.qml
i.e removing some component and then executing ? -
@p3c0
Okay, Any other way to access the TableView model in C++ side? -
@vishnu AFAIK. no. But that error is not related to
TableView
orListModel
. -
@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
-
@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]); }
-
@p3c0
I don't know why but the SLOT is not called when the data changes.
I did the connection in main itself.
main.qmlQQmlApplicationEngine 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?
-
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
useonDataChanged
signal handler.ListModel { id: myModel onDataChanged: console.log("Data Changed") }
thus verify whether the data is changed.
-
@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.qmlimport 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 } } } }
-
@vishnu AFAICS You are just adding and removing the data but not updating it. In this case dataChanged wont be called.
-
@p3c0
Any hint or example on how to update the data? Thanks a lot -
@vishnu Make use rowsInserted of rowsRemoved signals. Connect them to their respective slots as shown previously for
dataChanged
. -
@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