gpt4 book ai didi

c++ - QAbstractTableModel 清空最后一行,不排序

转载 作者:太空狗 更新时间:2023-10-29 21:41:15 27 4
gpt4 key购买 nike

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

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

如何制作?也许我应该使用另一种方法在我的模型中实现“制作空行”?

最佳答案

谢谢,穆里森。你的想法奏效了。我为空行项目的 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++ - QAbstractTableModel 清空最后一行,不排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29350352/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com