愚蠢的问题,但我找不到这个废话约一个小时的出路。我有一个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数据)!我认为我必须以某种方式“更新”模型内容,但我无法从模型文档中找到正确的方法...
任何帮助?
谢谢!
答案 0 :(得分:2)
创建代码并将其添加到模型中的代码看起来是正确的。
如果SignalBlocker
做了我怀疑它做的事情,我想这会引起你的麻烦。
当您添加项目时,模型会发出视图连接的信号,并在添加项目时进行更新。如果您在模型上调用blockSignals(true)
,则会阻止发出任何信号,并且不会通知视图更改。