Problem displaying a column in a ProxyModel



  • I've subclassed QSortFilterProxyModel and overridden the data() method to show two columns (name and surname) in a combobox as a single element.
    the combobox is mapped in a QWidgetMapper to edit a database.
    here's the problem: i select an element, then i click on another part of the window and my selection changes, and another element is selected automatically (it seems to be a random choice).

    here is the data() function:
    @
    QVariant MyProxyModel::data(const QModelIndex & index,int role) const{
    if (index.column()==1 && role==Qt::DisplayRole){
    QModelIndex name = mapToSource(index);
    QModelIndex surname = name.sibling(name.row(),name.column()+1);
    return (sourceModel()->data(name).toString()+" "+
    sourceModel()->data(surname).toString()).trimmed();
    }
    else return QSortFilterProxyModel::data(index,role);

    }@

    here is the mapping:
    @
    mapper->addMapping(ui->comboBox,column);
    MyProxyModel *opm = new MyProxyModel(this);
    opm->setSourceModel(model->relationModel(1));
    ui->comboBox->setModel(opm);
    ui->comboBox->setModelColumn(1);
    model->relationModel(1)->select();@

    another info: the issue exist only if i select an entry that effectively has a surname to concat; if i select someone with an empty surname my selection is conserved (obviously, the empty surname is a strange situation that exist because for testing I haven't inserted full names for everybody)



  • discovered something: the problem is caused by the delegate.

    @
    mapper->setItemDelegate(new QSqlRelationalDelegate(mapper));@

    when the real data is different from the proxy data, it makes crazy things.
    however, i don't know how to handle this.



  • well, exploring a bit, I've discovered the problem is inside qt. Since I have no time (and probably not enough skills) to remake the qsqlrelationalmodel class I'm stopping to use it and handle it by hand. when everything would be stable, I will post in the wiki my code snippets, and I hope it would be useful to somebody.
    Paolo


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.