为什么QTableView行数没有更新?

3 qt qtableview

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

int PresetTableModel::rowCount(const QModelIndex & /*parent*/) const
{
    qDebug() << preset_list.count();
    return preset_list.size();
}
Run Code Online (Sandbox Code Playgroud)

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

Fra*_*eld 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 
Run Code Online (Sandbox Code Playgroud)

因此,在删除行时必须调用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)
Run Code Online (Sandbox Code Playgroud)

限制深度.否则,列表中的每个项目都会再次包含preset_list.size()条目.