PDA

View Full Version : Depending Combobox



cia.michele
8th January 2012, 12:32
GoodMorning to all,
I've a problem perhaps easy to solve, but I don't know how :)

This is my problem: I've a Dialog that create a record for a Custromers table, and I've 3 tables in my db for Countries, City, and Zip codes.
I've create my Dialog with QDataWidgetMapper and QSqlRelationalTableModel and three relations for the table above, now, I got three QCombobox filled by data but... not filtered! I'd like that the QComboBox City show only the city relative to the Country selected on the precedings QComboBox (my table had 3 different Foreign keys for the 3 tables, so 3 relations isn't it?).

I can connect the currentIndexChanged(int) of the first QCombobox to a Slot that filter the model of the second one, but... when I use the QDataWidgetMapper to modify one element, this event don't fire so it doesn't work.

Where I got a mistake? How can I got what I search?

Thanks a lot for your time

Michele

cia.michele
10th January 2012, 17:11
Hello to everybody,
To solve this problem, i trying to subclass a QSqlRelationalDelegate, so that, at che column of second combobox, I can apply a filter on the QSqlTableModel returned by relationalModel; but i can't do this, because the delegate use only a const QModelIndex so i can't access the complete model and use the setFilter method. This is my code:

void setEditorData(QWidget *editor, const QModelIndex &index) const
{
switch(index.column()) {
case 4:{
const QSqlRelationalTableModel * sqlModel = qobject_cast<const QSqlRelationalTableModel *>(index.model());
sqlModel->setFilter(QString("CodProvincia=%1").arg(sqlModel->index(index.row,10).data().toInt());
QComboBox * combo = qobject_cast<QComboBox *> (editor);
if (!sqlModel || !combo){
QItemDelegate::setEditorData(editor,index);
return;
}
combo->setCurrentIndex(combo->findText(sqlModel->data(index).toString()));
break;}


But it return an error, because the index is only a constant. This is the error:

..\picloaddelegate.h:24: error: passing 'const QSqlRelationalTableModel' as 'this' argument of 'virtual void QSqlTableModel::setFilter(const QString&)' discards qualifiers

Any ideas of how resolve it?

thanks a lot for your time!

Michele