ここに私が持っているもの:
- ウィジェット
QTreeView
(*); - ソースモデル
MainModel
はから継承しQStandardItemModel
ます。data() const
再実装された仮想メソッドはありません。 - プロキシは;
MainFilterProxyModel
から継承します。QSortFilterProxyModel
ツリー:
[PERIOD 1]
[CHILD 1]
[CHILD 2]
[SUBCHILD 2.1]
...
[CHILD N]
[PERIOD 2]
...
[PERIOD N]
したがって、主な問題は、 (**)コードのようにCHILD行を追加しようとしたときに発生します。ドキュメントがソースモデルに追加された後のフィルタープロキシモデルは、新しい行を認識せず、ツリーに表示されませんでした。
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 );
}
}