0

次のモデルを使用した仮想テーブルビューの実装があります。

class MyModel: public QAbstractListModel
{

    int columnCount (const QModelIndex & parent = QModelIndex() ) const { return 2; }
    int rowCount (const QModelIndex & parent = QModelIndex() ) const { return count; }
    QModelIndex parent (const QModelIndex & index ) const { return QModelIndex(); }
    QModelIndex index (int row, int column, const QModelIndex & parent = QModelIndex() ) const { return createIndex(row, column); }


QVariant data(const QModelIndex & index, int role) const
{
    int col = index.column();
    int row = index.row();

    if (role == Qt::DecorationRole && col == 0)
    {            
        return getIcon(row); // icons in the first column
    }
    else if (role == Qt::DisplayRole && col == 1)
    {
        return getText(row); // text in the second column            
    }
    else
    {
        return QVariant();
    }
}

void update()
{
  getNewText();
  getNewIcons();  
  emit dataChanged((index(0,0)), index(count-1,1));
}

}

テーブルビューを作成してモデルを初めて割り当てた後は、すべてが正常に機能します。たとえば、テーブルビューに10個のアイテムが表示されます。

しかし、モデルを更新すると、12個のアイテムがあります。最初の10個だけが表示されます。10の値をキャッシュしたようで、更新したくないようです。

どうすれば修正できますか?

4

1 に答える 1

1

メソッドbeginRemoveRowsendRemoveRows、、、beginInsertRowsを呼び出すことで解決しましendInsertRowsupdate

于 2012-06-04T08:29:49.867 に答える