[Qt-interest] QTreeView, proxy model and expandable state
Dmitry Baryshev
ksquirrel.iv at gmail.com
Mon Apr 13 19:12:51 CEST 2009
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?
--
More information about the Qt-interest-old
mailing list