Solved How to access QSqlRelationalModel from function?
-
@mrjj said in How to access QSqlRelationalModel from function?:
@Panoss said in How to access QSqlRelationalModel from function?:
Hmm i would have expected it to call
your constructor but it seems not.
I thought 'RepairDevices win' calls the constructor.@mrjj said in How to access QSqlRelationalModel from function?:
@Panoss said in How to access QSqlRelationalModel from function?:
Using a debugger this would be really clear :)
I did use the debugger but it was not clear at all to me :).It still isn't, what must I do?
I ''l do mainwindow constructor as you suggested and post the result.I did the test you suggested me above, I had to change a dot to -> (ui->sn_search_txt to ui.sn_search_txt)
repairsmodel = new QSqlRelationalTableModel(this); QString sn = ui.sn_search_txt->toPlainText(); repairsmodel ->setFilter("id>76"); qDebug() << "in refresh_devices_search_tbl";
and got no error.
The etext is not printed, so the refresh_devices_search_tbl is not called now. -
@Panoss said in How to access QSqlRelationalModel from function?:
refresh_devices_search_tbl
who calls it ?
Is it a slot for a button or how should it be called? -
It 'a a slot for two combo boxes and two textboxes.
It 's called on textChanged and currentIndexChanged.
(omg text and index of combos I think do get changed during form's load, e.g when they are mapped to the data mapper.) -
@Panoss
well just check the
connects and its should be clear why its not called.
(connect return true / false)At some point you will also need to learn to use the debugger and set break points.
Its THE BEST tool to find out what is happening and where program goes. :) -
I found the guilty!!With the debugger.
It's a combo box which calls the function at oncurrentIndexChanged event!
This means that when a combo gets data from a model, the oncurrentIndexChanged event is called!!
How can I fix this? -
@Panoss
I think its by design.
When it get data, the current
index is changed so its correct to
emit the signal.
Check current index before and after and see.Most likely its 100% correct and you might need to use other signal or
wait until after the data load to set the connect.ps. Good work with debugger :)
-
Can I do something like this?
ui.type_search_cbo->cancelEventoncurrentIndexChanged; ui.type_search_cbo->setModel(model); ui.type_search_cbo->resetEventoncurrentIndexChanged;
(nice code, eh?)
-
well i would prefer if you could just wait to connect the slots
so its ok it says index changed.There is
http://doc.qt.io/qt-5/qobject.html#blockSignalsbut again, you are fixing a symptom so it not the best.
-
Yes, it works with block signals.
So, this is not the correct remedy?How could I wait to connect the slots?
I don't want just to fix the symptom, I want to do it properly. -
@Panoss
well where do you hook up the oncurrentIndexChanged signal? -
It's a slot for a combo:
void RepairDevices::on_type_search_cbo_currentIndexChanged(int index) { refresh_devices_search_tbl(); }
-
@Panoss said in How to access QSqlRelationalModel from function?:
Ah you are using the auto connect feature?
you do not have connect( xxxx) , correct ? -
No, I don't even know what autoconnect is.
I have no connect( xxxx) for this function.
(unless you 're meaning that this way, it 's autoconnected) -
well it means it will hook it up if names matches.
QMetaObject::connectSlotsByName(MainWindow);
( in setupUI)just use blockSignals then. :)
-
Thank you very much mrjj, you helped me A LOT!
-
@Panoss
Np.
Thats why i lurk around here :)