QAbstractTableModel为空最后一行,没有排序

时间:2015-03-30 15:36:56

标签: c++ qt sorting

我有自己的QAbstractTableModel子表模型(DragDropTableModel)。在里面,我希望最后一行保持空白。

我通过将insertRows()添加到setData()函数中来实现它:

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。问题是:当我进行排序时,最后一行也是排序的。但我想让它不服从排序并站在同一个最后位置。因此,无论排序顺序是(升序还是降序),最后一行都应该是空的。

如何制作?也许我应该用另一种方法来实现"做空行"在我的模特中?

1 个答案:

答案 0 :(得分:2)

谢谢,穆里森。你的想法奏效了。 我设置了一个值" EMPTY_ROW" for Qt :: UserRole为空行的项目。之后我在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。