QAbstractTableModel最后一行为空,不进行排序
QAbstractTableModel empty last row, without sorting
我有自己的表模型(DragDropTableModel),它是从QAbstractTableModel派生而来的。在里面,我希望最后一排永远是空的。
我通过在setData()函数中添加insertRows()来实现它:
bool DragDropTableModel :: setData (const QModelIndex &index, const QVariant &value, int role)
{
...
if (role == Qt::EditRole)
{
...
if (row == this->rowCount() - 1)
insertRows(this->rowCount(), 1);
}
}
之后我在上面安装了QSortFilterProxyModel。问题是:当我进行排序时,最后一行也会被排序。但我想让它不服从排序,站在最后一个位置。因此,无论排序顺序是(升序还是降序),最后一行都应该是空的。
如何制作?也许我应该用另一种方法来实现我的模型中的"造空行"?
谢谢,murison。你的想法奏效了。我为空行的项设置了Qt::UserRole的值"EMPTY_ROW"。之后,我在QSortFilterProxyModel:中重新实现了lessThan()方法
bool MySortFilterProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const
{
if (left.data(Qt::UserRole) == "EMPTY_ROW")
return (this->sortOrder() == Qt::DescendingOrder);
else if (right.data(Qt::UserRole) == "EMPTY_ROW")
return (this->sortOrder() == Qt::AscendingOrder);
else
return QSortFilterProxyModel::lessThan(left, right);
}
因此,这一行在排序后总是出现在表的底部。此外,当这一空行充满数据时,最好不要忘记清除Qt::UserRole。
相关文章:
- 二叉排序树无法编译
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- C++选择排序算法中的逻辑错误
- 从C++dll访问C#中的一行主要参数
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- 排序算法c++
- 使用2个键的cpp-stl::优先级队列排序不正确
- 将结构向量排序为子组
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 如何对点云数据进行排序
- 在C++中,我如何接受不同于同一行的用户输入
- 按一行对2D数组进行排序
- 根据某一行对整个 2D 向量进行排序
- 基于一行对 3D 向量进行排序(C++,std::sort)
- 基于C++中每一行的总和对2D阵列进行排序
- <myclass> 使用 STL 中的排序函数在一行中对 std::vector 进行排序