我有自己的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。问题是:当我进行排序时,最后一行也是排序的。但我想让它不服从排序并站在同一个最后位置。因此,无论排序顺序是(升序还是降序),最后一行都应该是空的。
如何制作?也许我应该用另一种方法来实现"做空行"在我的模特中?
答案 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。