gpt4 book ai didi

c++ - 如何使用 QStringList 过滤 QSortFilterProxyModel?

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

我需要通过 QStringList (m_shownElements) 中的 QString 值过滤 QSortFilterProxyModel。我已经创建了一些代码,但它还不起作用。我只需要显示包含 QStringList 中的值的行。我怎样才能让这个工作?我需要循环遍历 QStringList 还是有更好的方法?

bool ProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
{
if (m_filterEnabled)
{
QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent);
for (int i = 0; i < m_shownElements.size(); i++)
{
if (sourceModel()->data(index0).toString().contains(m_shownElements[i]))
// What now?
}
}

更新代码:

bool ProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
{
if (m_filterEnabled)
{
QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent);
for (int i = 0; i < m_rows.size(); i++)
{
if (sourceModel()->data(index0).toString().contains(m_rows[i]) && m_shownRow)
return true; //element should be shown
else if (sourceModel()->data(index0).toString().contains(m_rows[i]) && !m_shownRow)
return false; //element should NOT be shown
}
if (m_shownRow)
return false;
else
return true;
} else
return true; //no filter -> show everything
}

最佳答案

你快完成了。您所要做的就是根据是否显示该行返回 true/false:

bool ProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
{
if (m_filterEnabled)
{
QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent);
for (int i = 0; i < m_shownElements.size(); i++)
{
if (sourceModel()->data(index0).toString().contains(m_shownElements[i]))
return true;//element should be shown
}

return false;//not in the list -> don't show
} else
return true;//no filter -> show everything
}

关于你的第二个问题:我不认为有一种简单的方法可以提高效率,如果我错了请纠正我。但在您花费数小时对此进行优化之前,请先尝试它是否足够快。

关于c++ - 如何使用 QStringList 过滤 QSortFilterProxyModel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36113830/

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