我实现了一个自定义的 QAbstractTableModel
并且我正在为我的数据对象使用一个 std::vector
。
现在我想实现 sort() 方法,让我的表按列排序。 这基本上就是我所做的:
void SBStateTableModel::sort (int column, Qt::SortOrder order)
{
emit layoutAboutToBeChanged();
switch (column)
{
case Address:
if (order == Qt::DescendingOrder)
std::sort(states.begin(), states.end(), addr_comp_desc);
else
std::sort(states.begin(), states.end(), addr_comp_asc);
default:
return;
}
emit layoutChanged();
}
但单独发出 layoutChanged()
不会重绘 View 。当标记一行并循环浏览它们时,它们会在突出显示时得到更新。
该文档还谈到了更新持久性索引。这里有人建议,这实际上是没有必要的。
我什至不知道该怎么做。使用 persistentIndexList()
获取列表,然后我必须对其进行排序。但是 std::sort
不是一个稳定的排序。我不确定如何将持久索引与我的 vector 索引相匹配。
编辑: 只是‘案子’少了一个‘断’!因此该函数将在发出 layoutChanged 信号之前返回。
最佳答案
哦!
我已准备好深入研究 Qt 源代码。但是当我单步执行我的代码时,我看到光标跳到“默认”情况下的 return 语句。
我刚刚忘记给我的 switch-case 添加一个“break”!这只是一个简单的失败错误:(( 它现在与“layoutChanged”一起工作得很好。
关于c++ - 排序 QtTableModel - QTableView 没有得到更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20471456/