0

ばかげた質問ですが、私はこのがらくたから約1時間で抜け出す方法を見つけることができません。QTableViewで行を追加しようとしているウィジェットがありますQStandardItemModel。コンストラクターでは、前に

tableView->setModel( MyStandardItemModel );

私はこの関数を実行します:

void MyDialog::addItem( const SomeSection& section )
{
     SignalBlocker< QStandardItemModel > blocker( model_ );

     QStandardItem* visibilityItem = new QStandardItem;
     visibilityItem->setCheckable( true );
     visibilityItem->setCheckState( !section.hidden ? Qt::Checked : Qt::Unchecked );
     visibilityItem->setData( QVariant::fromValue( section ), Qt::UserRole + 1 );

     QStandardItem* descriptionItem = new QStandardItem( section.name );

     QStandardItem* signatureItem = new QStandardItem;
     if( section.sign )
     {
          signatureItem->setToolTip( tr( "Требует подписи" ) );
          signatureItem->setIcon( QIcon( ":/signatures/images/signatures/check-sgn.png" ) );
     }

     model_->appendRow( StandardItemList() << visibilityItem << descriptionItem << signatureItem );
}

PS:StandardItemListはただtypedef QList< QStandardItem* > StandardItemList;


したがって、最初にいくつか作成addItem()'s し、次にsetModel()すべての行がテーブルに表示されます。しかし、後で(現時点ではボタンをクリックしてから)別の行を追加しようとすると、

addItem( MyNewSection );

ウィジェットに変更が表示されませんQTableView(新しい行も新しいMyNewSectionデータもありません)。どういうわけかモデルのコンテンツを「更新」する必要があると思いますが、モデルのドキュメントから正しい方法を見つけることができません...

何か助けはありますか?

ありがとう!

4

1 に答える 1

2

アイテムを作成してモデルに追加するコードは正しいようです。

もしSignalBlocker私が疑うようなことをするとしたら、それがあなたの問題を引き起こすと思います。アイテムを追加すると、モデルはビューが接続する信号を発行し、アイテムを追加すると更新されます。モデルを呼び出すblockSignals(true)と、シグナルが発行されなくなり、ビューには変更が通知されません。

于 2011-11-14T19:39:37.827 に答える