c++ - 排序 QtTableModel - QTableView 没有得到更新

标签 c++ qt sorting model-view

我实现了一个自定义的 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/

相关文章:

algorithm - 查找既不是第 k 个最大值也不是第 k 个最小值的元素的时间复杂度?

c++返回保存在已删除动态对象中的字符串

c++ - 如何在 iOS 上的 QT/QML 中使用剪贴板

c++ - "tip"在箭头-Unicode 字符中的位置

c++ - 当 C++ 状态上的绑定(bind)变量更改时,QML 自定义项状态不会更改

java - 如何在java中将数组分成两半

iphone - 如何根据此属性对自定义对象数组进行排序?

c++ - Facebook 编程挑战

C++ std::string 和字符串

C++调用从基类派生的覆盖函数