[Solved] Mapping a column from a table to a QComboBox

  • Hi!
    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?


  • @combo->setModel(yourModel);

    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!

Log in to reply