[Interest] Depending QCombobox

Alex Malyushytskyy alexmalvtk at gmail.com
Thu Jan 12 03:17:45 CET 2012


Since nobody posted I decided to give my comments, even though I have
not worked with mentioned classes.
As far as I see your problem,

You need to be able:

1. to be notified when selection in combo-box is changed

This can be done by overriding createEditor and connecting combobox
signal (mostly likely you would want activated (const QString& ) )
to custom slot.
I recommend to use Qt::QueuedConnection.
This should insure that slots is not called when data is still changing.

2. apply filter to model index based on selection value.

Do this in the custom slot I mentioned above.
Only difficulty might be to find out index for which slot is called.

I would subclassed QComboBox,
added variable where I would store QModelIndex it was created for and
signal   activated ( const QModelIndex& , const QString& ),
which I would emit when selection changed

This way you will have enough information about
where action happened and what current selection is.

So you might find out index you have to apply filter to.


Regards,
   Alex

On Tue, Jan 10, 2012 at 9:45 AM, Michele Ciampichetti
<cia.michele at gmail.com> wrote:
> 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
>
>
>
>
> 2012/1/9 Michele Ciampichetti <cia.michele at gmail.com>
>>
>> Good morning to all,
>> How can I create 3 depending QCombobox, for example Country, City and Zip
>> Code, so that when I select one, the other ones are filtered by the value of
>> the first one? I'm use a QSqlRelationalTableModel and 3 relations (so also 3
>> QSqlTableModel). I know that I can use QComboBox signal to filter data of
>> QSqlTableModel, but if I use the QDataWidgetMapper the search on it don't
>> fire any QCombobox Signal, so, how can I got what I want?
>>
>>
>> Thanks a lot for your time!
>>
>> Michele
>
>
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest
>



More information about the Interest mailing list