这是我得到的:
- 一个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 );
     }
}