[Qt-interest] Hide deleted rows in QSqlTableModel

Thomas Richard thomas9999 at gmail.com
Sat Nov 28 18:36:13 CET 2009


Hey,

First of all, thanks for the replies!

On Saturday 28 November 2009 17:12:55 Sean Harmer wrote:
> > The only way i found so far is to connect an own slot to
> >   <table model>->headerDataChanged (...)
> >
> > Inside this method i code the following:
> > ---------------- cut --------------------
> > void Class::OwnHeaderChanged (Qt::Orientation orientation, int start, int
> > end) {
> >    if (orientation != Qt::Vertical)
> >     return;
> >
> >   for (int loop = start; loop <= end; ++loop)
> >   {
> >     QVariant sign = <table model>->headerData (loop, orientation);
> >     if (sign == QLatin1String ("!"))
> >       ui.<table view>->hideRow (loop);
> >   }
> > }
> > ---------------- cut --------------------

That might be a solution. But it's not pretty. You have to make a connection 
every time you want to use this and you have to paste this code in every class 
you use it. (Unless you make your class inherit some other class which 
implements this but that's not an option for me)

> I would guess (but have not tried) that this could be achieved with a
> fairly simple subclass of QSortFilterProxyModel that sits between your
> QSqlTableModel and the view. Just do your check in the
> filterAcceptsRow() virtual function.
> 

I tried this out today but it doesn't work as i expected. The 
filterAcceptsRow() is for some reason not called when i call
model->deleteRow().

Up until now I'm manually hiding rows when i click the delete button and 
making every row visible again when i call revertAll(). I really need to find 
a better solution though. I'm going to look at subclassing QTreeView now and 
see if i can find something in there to use. I think this should become part 
of Qt though. Some sort of setDeletedRowsHidden(bool). I guess that is a 
feature request ;)

Greetings
Thomas Richard



More information about the Qt-interest-old mailing list