簡體   English   中英

Qt模型測試,刪除行

[英]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 ) ) );
}

它將刪除前的值與刪除后的值進行比較。 就我而言,由於我還顯示索引,因此它們不匹配。 例如,我在模型中有Item1Item2 如果刪除了Item1 ,則Item2變為Item1 ,並且測試失敗。

我的問題是我的模型實現有問題嗎? 我應該以不同的方式處理這種情況嗎?

QAbstractItemModel中的數據不能僅以靜默方式更改。 對於數據已更改的索引,應始終發出dataChanged信號。

如果您這樣做:

" [" + QString::number(childNumber()) + "]"

那么您需要在childNumber()每次更改時發出dataChanged信號。 因此,如果僅通過QAbstractItemModel :: setData可以更改索引數據,將會容易得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM