Вот что у меня есть:
- виджет
QTreeView
(*); - Исходная модель
MainModel
наследуется отQStandardItemModel
. Виртуальный методdata() const
не перереализован; - Прокси
MainFilterProxyModel
наследуется отQSortFilterProxyModel
;
Дерево:
[PERIOD 1]
[CHILD 1]
[CHILD 2]
[SUBCHILD 2.1]
...
[CHILD N]
[PERIOD 2]
...
[PERIOD N]
Итак, основная проблема возникает, когда я пытаюсь добавить CHILD-row, как это делает (**) код. Модель прокси фильтра после добавления документа в исходную модель не знает о новой строке и не показывает ее в дереве.
Я уверен, что прокси не получил сигнал от QStandardItemModel
, когда метод appendRow
выполняет свою работу, поэтому прокси не может фильтровать новую строку и не делает ее видимой.
Любая помощь?
Спасибо.
PS: Если я отключу прокси, все будет добавлено просто отлично. Но проблема не в прокси. Прокси просто не получает сигнал о добавлении новой строки к основной исходной модели...
(*) Вот QTreeView
:
MainView::MainView( QWidget* parent /* = 0 */ ) : QTreeView( parent )
{
if( !model_ )
{
model_ = new MainModel( this );
}
if( !proxy_ )
{
proxy_ = new MainFilterProxyModel( this );
proxy_->setDynamicSortFilter( true );
proxy_->setSourceModel( model_ );
setModel( proxy_ );
}
}
(**) Вот моя функция добавления:
void MainModel::addRow( const DocumentPtr& document, QStandardItem* parentItem )
{
assert( document );
QList< QStandardItem* > items;
items << ( new QStandardItem );
items << ( new QStandardItem );
items << ( new QStandardItem );
items << ( new QStandardItem );
items << ( new QStandardItem );
items << ( new QStandardItem );
items << ( new QStandardItem );
updateRow( document, items );
if( !parentItem )
{
BOOST_FOREACH( const TimePeriod& period, TimePeriod::all() )
{
if( period.contains( QDateTime::fromTime_t( document->creationDate() ) ) )
{
QStandardItem* periodItem = itemByPeriod( period );
Q_ASSERT( periodItem );
periodItem->appendRow( items );
break;
}
}
}
else
{
parentItem->appendRow( items );
}
}