Search code examples
qtfilterqtreewidget

QTreeWidget findItems or filter by icon


I'm using QTreeWidget with icons and strings data.

Right now I'm using my own filter function to filter out string via QTreeWidget::findItems function and it's works pretty good.

BUT, how can I filter/findItems by icons ?

The Qt findItems functions can get only strings as input...

Any suggestions ?


Solution

  • Try this:

    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;
    }
    

    This will find the first match only, is it enough ?

    If not then here is a function which finds all the items with the given icon:

    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;
    }