如何更新特定的 QAbstractListModel 项目?
How can I update a particular QAbstractListModel item?
我从 QAbstractListModel 派生了一个 class FeedItemViewModel。
我已经实现了一种在列表模型中添加项目的方法,但我不知道如何更新具有特定 ID 的项目。
代码如下:
void FeedItemViewModel::addFeedItem(FeedItem* feedItem)
{
beginInsertRows(QModelIndex(), rowCount(), rowCount());
m_feedItems.append(feedItem);
endInsertRows();
}
void FeedItemViewModel::updateFeedItem(FeedItem* feedItem)
{
int id = feedItem->id();
auto iter = std::find_if(m_feedItems.begin(), m_feedItems.end(),
[id](FeedItem* item)
{
return item->id() == id;
});
}
这是我找到的解决方案:
void FeedItemViewModel::updateFeedItem(FeedItem* feedItem)
{
int id = feedItem->id();
auto iter = std::find_if(m_feedItems.begin(), m_feedItems.end(),
[id](FeedItem* item)
{
return item->id() == id;
});
if(iter != m_feedItems.end())
{
int indx = m_feedItems.indexOf(*iter);
m_feedItems[indx] = feedItem;
dataChanged(index(indx), index(indx));
}
}
如果您只是更新一个项目而不是替换它,您可以通过查找指针本身而不是使用 id 属性
来简化
void FeedItemViewModel::updateFeedItem(FeedItem *feedItem){
int indx = m_feedItems.indexOf(feedItem);
if(indx != -1){
dataChanged(index(indx), index(indx));
}
}
我从 QAbstractListModel 派生了一个 class FeedItemViewModel。 我已经实现了一种在列表模型中添加项目的方法,但我不知道如何更新具有特定 ID 的项目。
代码如下:
void FeedItemViewModel::addFeedItem(FeedItem* feedItem)
{
beginInsertRows(QModelIndex(), rowCount(), rowCount());
m_feedItems.append(feedItem);
endInsertRows();
}
void FeedItemViewModel::updateFeedItem(FeedItem* feedItem)
{
int id = feedItem->id();
auto iter = std::find_if(m_feedItems.begin(), m_feedItems.end(),
[id](FeedItem* item)
{
return item->id() == id;
});
}
这是我找到的解决方案:
void FeedItemViewModel::updateFeedItem(FeedItem* feedItem)
{
int id = feedItem->id();
auto iter = std::find_if(m_feedItems.begin(), m_feedItems.end(),
[id](FeedItem* item)
{
return item->id() == id;
});
if(iter != m_feedItems.end())
{
int indx = m_feedItems.indexOf(*iter);
m_feedItems[indx] = feedItem;
dataChanged(index(indx), index(indx));
}
}
如果您只是更新一个项目而不是替换它,您可以通过查找指针本身而不是使用 id 属性
来简化
void FeedItemViewModel::updateFeedItem(FeedItem *feedItem){
int indx = m_feedItems.indexOf(feedItem);
if(indx != -1){
dataChanged(index(indx), index(indx));
}
}