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)
我还需要做些什么来强制它更新行数吗?
修改基础数据时,必须使用模型的通知机制来通知视图.例如,在追加数据时:
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()条目.
| 归档时间: |
|
| 查看次数: |
4407 次 |
| 最近记录: |