为什么QTableView行数没有更新?

时间:2011-12-21 20:31:59

标签: qt qtableview

我创建了一个名为QAbstractTableModel的{​​{1}},并将其连接到PresetTableModel。我实施了QTableViewrowCount和数据函数。如果我columnCount返回一个固定数字,一切都有效,但是一旦我得到它返回一个变量值,列表视图就不会显示任何行。下面代码中的debug语句显示从0开始的大小值,但是一旦填充了列表,就会更改为9。

rowCount

我还需要做些什么来强制它更新行数吗?

2 个答案:

答案 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();
  }