[英]Qt Model Test, removeRows
我有一個內部結構類似於簡單樹模型示例的樹模型 。 有一個特殊的數組類型項,我要為其顯示索引。 我的數據方法如下所示:
QVariant Model::data(const QModelIndex & index, int role ) const
{
if (!index.isValid())
return QVariant();
TreeNode *item = getItem(index);
if (role == Qt::DisplayRole) {
return item->text();
}
...
return QVariant();
}
const QString TreeNode::text() const
{
if (array) {
return name() + " [" + QString::number(childNumber()) + "]";
}
return mText;
}
我有一個執行節點刪除的單元測試,它使用Model Test 。 問題出現在此測試的最后一行
void ModelTest::rowsRemoved ( const QModelIndex & parent, int start, int end )
{
Changing c = remove.pop();
QVERIFY( c.parent == parent );
QVERIFY( c.oldSize - ( end - start + 1 ) == model->rowCount ( parent ) );
QVERIFY( c.last == model->data ( model->index ( start - 1, 0, c.parent ) ) );
QVERIFY( c.next == model->data ( model->index ( start, 0, c.parent ) ) );
}
它將刪除前的值與刪除后的值進行比較。 就我而言,由於我還顯示索引,因此它們不匹配。 例如,我在模型中有Item1
和Item2
。 如果刪除了Item1
,則Item2
變為Item1
,並且測試失敗。
我的問題是我的模型實現有問題嗎? 我應該以不同的方式處理這種情況嗎?
QAbstractItemModel中的數據不能僅以靜默方式更改。 對於數據已更改的索引,應始終發出dataChanged信號。
如果您這樣做:
" [" + QString::number(childNumber()) + "]"
那么您需要在childNumber()每次更改時發出dataChanged信號。 因此,如果僅通過QAbstractItemModel :: setData可以更改索引數據,將會容易得多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.