QTreeWidget findItems или фильтрация по значку

Я использую QTreeWidget с данными значков и строк.

Прямо сейчас я использую свою собственную функцию фильтра для фильтрации строки через QTreeWidget::findItems и работает довольно хорошо.

НО, как я могу фильтровать/находить элементы по значкам?

Функции Qt findItems могут получать на вход только строки...

Какие-либо предложения ?


person Simon    schedule 26.05.2015    source источник


Ответы (1)


Попробуй это:

QTreeWidgetItem* findByIcon( QTreeWidget* aTreeWidget, const QIcon& aIcon, const int aColumn = 0 )
{
    QTreeWidgetItemIterator iterator( aTreeWidget );
    while ( *iterator )
    {
        if ( (*iterator)->data( aColumn, Qt::DecorationRole ) == aIcon )
        {
            return (*iterator);
        }
        ++iterator;
    }
    return nullptr;
}

Это найдет только первое совпадение, этого достаточно?

Если нет, то вот функция, которая находит все элементы с данным значком:

QList< QTreeWidgetItem* > findByIcon( QTreeWidget* aTreeWidget, const QIcon& aIcon, const int aColumn = 0 )
{
    QList< QTreeWidgetItem* > items;
    QTreeWidgetItemIterator iterator( aTreeWidget );
    while ( *iterator )
    {
        if ( (*iterator)->data( aColumn, Qt::DecorationRole ) == aIcon )
        {
            items << (*iterator);
        }
        ++iterator;
    }
    return items;
}
person p.i.g.    schedule 26.05.2015