我创建了一个名为QAbstractTableModel
的{{1}},并将其连接到PresetTableModel
。我实施了QTableView
,rowCount
和数据函数。如果我columnCount
返回一个固定数字,一切都有效,但是一旦我得到它返回一个变量值,列表视图就不会显示任何行。下面代码中的debug语句显示从0开始的大小值,但是一旦填充了列表,就会更改为9。
rowCount
我还需要做些什么来强制它更新行数吗?
答案 0 :(得分:6)
修改基础数据时,必须使用模型的通知机制来通知视图。例如,在追加数据时:
beginInsertRows(QModelIndex(), preset_list.size(), preset_list.size()+1); //notify that two rows will be appended (rows size() and size() + 1)
preset_list.append(something);
preset_list.append(somethingelse);
endInsertRows(); //notify views that you're done with modifying the underlying data
因此,在删除行时必须调用beginRemoveRows()和endRemoveRows(),并在更新现有条目时发出dataChanged()。
另外,您的rowCount()方法应为
if (!parent.isValid())
return preset_list.size(); //top-level: return list size
else
return 0; //list item: no further children (flat list)
限制深度。否则,列表中的每个项目都会再次包含preset_list.size()条目。
答案 1 :(得分:0)
我用:
void refresh() {
emit dataChanged(index(0, 0),
index(rowCount(), columnCount())); // update whole view
emit layoutChanged();
}