[Solved] Mapping a column from a table to a QComboBox
I have a table in a database and I want a column's content be shown in a QComboBox.
I've seen examples using a QDataWidgetMapper for this but there is another table.
I've thought creating another table and create a relation with a foreign key and then to follow the strategy in sql examples for mapping
the column to QComboBox.
Is there a way for mapping the content of a table's column to a QComboBox without creating another table?
if you want to map in this combo box the column of an external table, your model must be a QSqlRelationalTableModel, you have to set relations properly (see the docs) then you can get the external table with
@yourModel=modelToMap->relationModel(<foreing key column>);@
How can I make the first item to be empty and the rest of items to start after the empty one?
you can do an "insertRow(0)":http://doc.qt.nokia.com/4.7/qabstractitemmodel.html#insertRow on yourModel. you have to pay attention not to submit changes to the underlying db.
if you set this, the db won't be modified unless you call yourModel->submitAll();
But with a submit, the row will be written to the DB :-(
The other option would be to use a proxy model, which adds this empty row.
[quote author="p91paul" date="1311080997"]you have to pay attention not to submit changes to the underlying db[/quote]
I have said this =D
obviously your idea is better, gerolf, cause original model is not touched.
I didn't made it. I did like that and doesn't work:
model = new QSqlRelationalTableModel(this);
proxyModel = new QSortFilterProxyModel;
you have to add proxyModel->insertRow();
What would you like and did not work? Creating an own proxy model?
It works fine now. First I've understood that a proxy model automatically ads an extra row.
Now I added proxyModel->insertRow(0); and it works like I want.
Thank you very much!