qt - 为什么 QTableView 行数不更新?

标签 qt qtableview

我创建了一个名为 PresetTableModelQAbstractTableModel,并将其连接到 QTableView。我实现了 rowCount、columnCount 和数据函数。如果我让 rowCount 返回固定数字,则一切正常,但一旦我让它返回变量值, ListView 就不会显示任何行。下面代码中的调试语句显示的大小值从 0 开始,但在列表填充后更改为 9。

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

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

最佳答案

修改底层数据时,必须使用模型的通知机制来通知 View 。例如,附加数据时:

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()条目。

关于qt - 为什么 QTableView 行数不更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8595981/

相关文章:

Qt 模型/ View : how to handle underlying data properly

qt - 编辑 QTableView 单元格时设置初始文本

c++ - 在 QImage alpha channel 中制作多边形孔

c++ - 扩展光标长度QLineEdit?

c++ - 如何使用 C++ 和 Qt 将 QPixmap 保存为文件夹中的图片?

c++ - Qt:保存 Qt-creator 应用程序的 SQLite 数据库的最佳 "Path"在哪里?

c++ - QStyledItemDelegate 和 QStandardItem 防止更改文本,仅启用选择和复制

qt - 如何在QTableView中选择行?

c++ - 使用来自不同线程的实时数据更新 QTableView 的最佳策略

c++ - 如何将 CodeSynthesis-XSD 包含到自己的应用程序中?