次のモデルを使用した仮想テーブルビューの実装があります。
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の値をキャッシュしたようで、更新したくないようです。
どうすれば修正できますか?