2011-11-14 19 views
0

愚蠢的問題,但我不能找到這個垃圾約一個小時的路。我有一個QTableView小部件,試圖用QStandardItemModel添加行。在構造函數,如何在setModel()方法之後將appendRow添加到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數據在裏面)!我想,我必須以某種方式「更新」模式的內容,但我不能找到模型文檔正確的方法......

任何幫助嗎?

謝謝!

回答

2

創建和添加項目到模型的代碼看起來是正確的。

如果SignalBlocker做什麼,我懷疑它做的事,我想,它會導致你的煩惱。 當你添加項目,該模型發出該視圖連接,更新您添加的項目的信號。如果在模型上調用blockSignals(true),則可以防止發射任何信號,並且不會通知視圖中的更改。

+0

是的,你說得對!謝謝 - 我的錯... – mosg

相關問題