2011-11-14 6 views
0

愚かな質問ですが、私は約1時間ほどこのくそからの道を見つけることができません。 QStandardItemModelで行を追加しようとしているQTableViewウィジェットがあります。 CTORでは、setModel()メソッドの後の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だから最初にすべての私はいくつかaddItem()'sを作った後、setModel()、すべてのちょうどtypedef QList< QStandardItem* > StandardItemList;


ですテーブル内に行が表示されます。 しかしは私がQTableViewウィジェットの変更(新しい行と新しいMyNewSectionデータが表示されない

addItem(MyNewSection); 

と、(クリックされたボタンから、現時点では)後で別の行を追加しようとしているときその中に)!モデルの内容をどうにかして更新する必要があると思いますが、モデルのドキュメントから正しい方法を見つけることができません...

助けが必要ですか?

ありがとうございます!

答えて

2

モデルを作成してモデルに追加するコードが正しいように見えます。

SignalBlocker私はそれがあなたの悩みを引き起こすと思われることをします。 アイテムを追加すると、モデルが表示される信号が放出され、アイテムを追加すると更新されます。モデル上でblockSignals(true)を呼び出すと、信号が放出されないようにし、ビューには変更が通知されません。

+0

はい、あなたは正しいです!ありがとう - 私のせい... – mosg

関連する問題