ばかげた質問ですが、私はこのがらくたから約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データもありません)。どういうわけかモデルのコンテンツを「更新」する必要があると思いますが、モデルのドキュメントから正しい方法を見つけることができません...
何か助けはありますか?
ありがとう!