gpt4 book ai didi

c++ - QIdentityProxyModel 显示空行

转载 作者:行者123 更新时间:2023-11-30 05:12:31 24 4
gpt4 key购买 nike

我已经像这样实现了 QIdentityProxyModel:

class ProxyModel : public QIdentityProxyModel
{
Q_OBJECT
public:
ProxyModel(QObject *parent)
{
entriesPerPage = 3;
page = 1;
}

inline int getEntriesPerPage() const
{ return entriesPerPage; }
inline void setEntriesPerPage(int value)
{ entriesPerPage = value; }

inline qint64 getPage() const
{ return page; }
inline void setPage(const qint64 &value)
{ page = value; }

inline int rowCount(const QModelIndex &parent = QModelIndex()) const override{
Q_UNUSED(parent)
if(!sourceModel())
return 0;

return entriesPerPage * page <= sourceModel()->rowCount()
? entriesPerPage
: sourceModel()->rowCount() - entriesPerPage * (page - 1);
}

inline int columnCount(const QModelIndex &parent = QModelIndex()) const override{
Q_UNUSED(parent);
return 6;
}

QModelIndex ProxyModel::mapFromSource(const QModelIndex &sourceIndex) const
{
if(!sourceModel() && !proxyIndex.isValid())
return QModelIndex();

return sourceIndex.isValid()
? createIndex(sourceIndex.row() % entriesPerPage, sourceIndex.column(), sourceIndex.internalPointer())
: QModelIndex();
}

QModelIndex ProxyModel::mapToSource(const QModelIndex &proxyIndex) const
{
if(!sourceModel() && !proxyIndex.isValid())
return QModelIndex();

QModelIndex remapped = createIndex(proxyIndex.row() ,
proxyIndex.column(),
proxyIndex.internalPointer());
return QIdentityProxyModel::mapToSource(remapped);
}

private:
int entriesPerPage;
qint64 page;
};

当我在 sourceModel() 中插入一行索引大于 entriesPerPage 时, View 显示空行,因此行号大于 entriesPerPage,尽管 rowCount() 返回的数字等于 entriesPerPage

enter image description here

我怎样才能去掉空行?

最佳答案

首先。为 QIdentityProxyModel 覆盖 rowCount/mapFromSource 是一种不好的做法。我建议您使用 QAbstractProxyModel 以获得更清晰的代码。

主要。您的问题出在 getEntriesPerPage/setPage 方法中。更新此类数据后,您需要调用 beginResetModel/endResetModel

inline void setPage(const qint64 &value)
{
beginResetModel();
page = value;
endResetModel();
}

Offtopic:非常酷,您必须在 BSUIR 中使用 Qt 进行编码。你的老师是谁?

关于c++ - QIdentityProxyModel 显示空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44495253/

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