Solved How to modify the data in the model and update the view when new data is received from external?
-
@VRonin : Done.
-
I'm concentrating on the model only at the moment but it works perfectly for me.
The only thing that I would flag is that the json that you provided has all"ReadOnly": true
so it won't allow changes unless you change that to false.Could you try this fork and tell me what is that you expect to happen that is not happening?
-
@VRonin: Now there is a function with following signature
void ScenarioPropertiesModel::onRefreshRoadInfo(const NewData& roadInfo) {}
Now i would ask you to set the model data (properties) to the new values present in roadInfo variable(or to a random number) in the above function and display it in the view.
My usecase is that, i will have a street and when user clicks on the street onRefreshRoadInfo will be called with the values which are actually coordinates and these i want to show.
-
So you are confirming that, so far, the fork above is behaving correctly?
-
@VRonin : Yes, it works correctly. :)
-
Could you check the same fork now and see if
onRefreshRoadInfo
does what you expect? -
@VRonin : Hi Ronin, i checked your fork and it is working exactly as i need. So i tried to copy the code in my implementation and sadly it is not working, i even commented out the delegates. Could you please implement the ur logic in my code and see if you can make it work? I mean use the ui and view class. May be something is buggy in my view class? But there is nothing much in the view class too.------Update--------
I tried to use your main function with my implementation as below so that my view class is used. But turns out the implementation does not work.QApplication a(argc, argv); //ScenarioPropertiesModel model; //QTreeView w; //w.setModel(&model); //w.show(); PropertyEditorView view;// model creation and setting done in class constructor // QPushButton sendRefreshRoadInfoButton("Refresh //Road Info"); // sendRefreshRoadInfoButton.show(); //QObject::connect(&sendRefreshRoadInfoButton,&QPushB//utton::clicked,&model,&ScenarioPropertiesModel::onRe//freshRoadInfo); i use my own signal and slot return a.exec();~~
When i modified the main as below it is working.
QApplication a(argc, argv); ScenarioPropertiesModel model; PropertyEditorView w; w.ui_->treeView->setModel(&model); // removed setting from PropertyEditorView constructor as we set here w.show(); QPushButton sendRefreshRoadInfoButton("Refresh Road Info"); sendRefreshRoadInfoButton.show(); QObject::connect(&sendRefreshRoadInfoButton,&QPushButton::clicked,&model,&ScenarioPropertiesModel::onRefreshRoadInfo); return a.exec();
Do you see any reason for this behavior. -
Because on your first version of the code you are not connecting to the model you have in your PropertyEditorView but the one you declared above. On a side note, that can't compile since you commented out your model declaration.
-
This post is deleted! -
@SGaist @JonB @VRonin : So i took a deep breathe and tried to implement my code from scratch using @VRonin solution i.e. his latest fork https://github.com/VSRonin/qtmodelview.
Now my code is working :). This was the piece of line which helped me:const QModelIndex parentIdx = index(0, 0); const QModelIndex xValueIndex = index(0, 1, parentIdx); setData(xValueIndex, 2.55);
Additionally deep inside my code i had two pointers to my view which was also the cause for not showing the new values. The thread can be closed. I have a request @VRonin if he could take out the link to the code as it is a part of commercial project. Thank you everyone for your help, especially @VRonin.