[Qt-interest] QTreeView, proxy model and expandable state
Dmitry Baryshev
ksquirrel.iv at gmail.com
Mon Apr 13 19:26:21 CEST 2009
2009/4/13 Scott Aron Bloom <Scott.Bloom at sabgroup.com>:
>
>
>> -----Original Message-----
>> From: qt-interest-bounces at trolltech.com [mailto:qt-interest-
>> bounces at trolltech.com] On Behalf Of Dmitry Baryshev
>> Sent: Monday, April 13, 2009 10:13 AM
>> To: qtInterest
>> Subject: Re: [Qt-interest] QTreeView, proxy model and expandable state
>>
>> 2009/4/13 Dmitry Baryshev <ksquirrel.iv at gmail.com>:
>> > 2009/4/13 Scott Aron Bloom <Scott.Bloom at sabgroup.com>:
>> >> It will really depend on what you implemented in your filterAcceptsRows
>> >> method.
>> >>
>> >> Without seeing the guts of it, I have no idea how to help you.
>> >>
>> >> Scott
>> >>
>> >> -----Original Message-----
>> >> From: qt-interest-bounces at trolltech.com
>> >> [mailto:qt-interest-bounces at trolltech.com] On Behalf Of Dmitry Baryshev
>> >> Sent: Monday, April 13, 2009 8:26 AM
>> >> To: qt-interest at trolltech.com
>> >> Subject: [Qt-interest] QTreeView, proxy model and expandable state
>> >>
>> >> Hi.
>> >>
>> >> I use QTreeView+QFileSystemModel. It seems to work fine, all directory
>> >> items have expanable flag ("+" on the left side). Now I've added
>> >> QSortFilterProxyModel with only one reimplemented method - "bool
>> >> SortFilterProxyModel::filterAcceptsRow(int row, const QModelIndex
>> >> &parent) const". Now all directory items in QTreeView lost its
>> >> expandable state - no '+' elements.
>> >> QTreeView::setItemsExpandable(true) doesn't help. I don't understand
>> >> the logic why filtering affects expandable states? Could you please
>> >> help me with this strange problem? Thanks!
>> >>
>> >> --
>> >> _______________________________________________
>> >> Qt-interest mailing list
>> >> Qt-interest at trolltech.com
>> >> http://lists.trolltech.com/mailman/listinfo/qt-interest
>> >>
>> >> _______________________________________________
>> >> Qt-interest mailing list
>> >> Qt-interest at trolltech.com
>> >> http://lists.trolltech.com/mailman/listinfo/qt-interest
>> >>
>> >
>> > In any case it doesn't work. For example:
>> >
>> > bool MySortFilterProxyModel::filterAcceptsRow(int row, const
>> > QModelIndex &parent) const
>> > {
>> > return true;
>> > }
>> >
>> > --
>> >
>>
>> Full source code to reproduce:
>>
>> .h
>> --
>>
>> #ifndef FLL_H
>> #define FLL_H
>>
>> #include <QTreeView>
>>
>> class fl : public QTreeView
>> {
>> Q_OBJECT
>>
>> public:
>> fl(QWidget *parent = 0);
>> };
>>
>> #endif
>>
>> .cpp
>> ----
>>
>> #include <QFileSystemModel>
>> #include <QSortFilterProxyModel>
>>
>> #include "fl.h"
>>
>> class SortFilterProxyModel : public QSortFilterProxyModel
>> {
>> public:
>> SortFilterProxyModel(QObject *parent) : QSortFilterProxyModel(parent)
>> {
>> setFilterRegExp(".*");
>> }
>>
>> protected:
>> bool filterAcceptsRow(int /* row */, const QModelIndex &/*
>> parent */) const
>> {
>> return true;
>> }
>> };
>>
>> #define USE_PROXY_MODEL
>>
>> fl::fl(QWidget *parent) : QTreeView(parent)
>> {
>> QFileSystemModel *model;
>>
>> model = new QFileSystemModel;
>> model->setResolveSymlinks(true);
>> model->setNameFilterDisables(false);
>> model->setReadOnly(true);
>>
>> SortFilterProxyModel *proxyModel;
>>
>> proxyModel = new SortFilterProxyModel(this);
>> proxyModel->setSourceModel(model);
>> proxyModel->setDynamicSortFilter(true);
>>
>> #ifdef USE_PROXY_MODEL
>> QModelIndex root =
>> proxyModel->mapFromSource(model->setRootPath(QDir::rootPath()));
>> setModel(proxyModel);
>> #else
>> QModelIndex root = model->setRootPath(QDir::rootPath());
>> setModel(model);
>> #endif
>>
>> setRootIndex(root);
>> }
>>
>> /*********************************/
>>
>> define or undef USE_PROXY_MODEL to test two cases with and without proxy
>> model.
>>
>> Result:
>>
>> 1) without proxy model: http://img258.imageshack.us/img258/7271/fl1.png
>> 2) with proxy model: http://img258.imageshack.us/img258/1606/fl2.png
>>
>> The system is Debian Lenny with Qt 4.4.3.
>>
>> Maybe it is a bug?
>>
>> --
>>
>> _______________________________________________
>> Qt-interest mailing list
>> Qt-interest at trolltech.com
>> http://lists.trolltech.com/mailman/listinfo/qt-interest
>
> Its probably your setFilterRegExp call... Try turning that off, and leaving the filterAcceptsRow... See what happens
>
> Scott
>
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at trolltech.com
> http://lists.trolltech.com/mailman/listinfo/qt-interest
>
I removed setFilterRegExp() but nothing changed... Even more - if I
remove filterAcceptsRow() at all nothing changes again - items are
still not expandable. And even more... :) If I try to set expandable
flag by hand:
....
setRootIndex(root);
setRootIsDecorated(true);
setItemsExpandable(true);
setExpandsOnDoubleClick(true);
}
it still doesn't work for some reason... Double clicking doesn't open
an item too. Qt 4.5 has the same result as 4.4.3 :(
--
Regards, Krasu.
More information about the Qt-interest-old
mailing list