【问题标题】:HowTo appendRow to QStandardItemModel after setModel() method?如何在 setModel() 方法之后将 Row 附加到 QStandardItemModel?
【发布时间】:2011-11-15 05:33:21
【问题描述】:

愚蠢的问题,但是大约一个小时我找不到摆脱这种废话的方法。我有一个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&lt; QStandardItem* &gt; StandardItemList;


首先我做了一些addItem()'s 然后setModel() 并且所有行都在表格中可见。 但是当我稍后尝试附加另一行时(此时从单击的按钮开始),使用

addItem( MyNewSection );

我没有看到 QTableView 小部件的变化(其中没有新行和新的 MyNewSection 数据)!我认为我必须以某种方式“更新”模型内容,但我无法从模型文档中找到正确的方法......

有什么帮助吗?

谢谢!

【问题讨论】:

    标签: qt qt4 qstandarditemmodel


    【解决方案1】:

    创建项目并将项目添加到模型的代码看起来是正确的。

    如果SignalBlocker 做了我怀疑它会做的事情,我想它会给你带来麻烦。 当您添加项目时,模型会发出视图连接到的信号,并在您添加项目时更新。如果您在模型上调用 blockSignals(true),您会阻止发出任何信号,并且视图不会收到更改通知。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-01
      • 2016-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多