愚蠢的问题,但是大约一个小时我找不到摆脱这种废话的方法。我有一个QTableView
小部件,试图用QStandardItemModel
. 在 ctor 之前
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 数据)!我认为我必须以某种方式“更新”模型内容,但我无法从模型文档中找到正确的方法......
有什么帮助吗?
谢谢!