Фильтровать тип QGraphicsItems в сцене из items()

Я ищу способ получить все QGraphicsLineItem из сцены, используя items().

Он дает список всех QGraphicsItem, но я хочу выполнять действия, например, только с QGraphicsLine. Как я могу отсортировать этот список/извлечь элементы, которые я хочу, с определенным типом?


person DevOops    schedule 20.06.2020    source источник


Ответы (1)


Вы можете просмотреть список и проверить тип с помощью dynamic_cast:

// I'm not sure where you want to implement this,
// but it can be in your derived GraphicsScene class.
// Else, just call scene->items() and make a new list
// outside of the scene class.
void CustomScene::foo()
{
    QList<QGraphicsItem*> itemList = items();
    for (int i = 0; i < itemList.size(); ++i) {
         if (auto lineItem{dynamic_cast<QGraphicsLineItem*>(itemList[i])})
             // do a specific action or put this in a QList of QGraphicsLiteItem*s
             // and return that list instead of void
             ;
    }
}

Я не тестировал этот код, но что-то вроде этого должно быть возможно.

person Community    schedule 20.06.2020
comment
Спасибо, это мне уже очень помогает, я протестировал его, чтобы удалить все линии! Просто измените на 'dynamic_cast‹QGraphicsLineItem*›' - person DevOops; 20.06.2020
comment
Упс, извините :P Кроме того, вы, конечно, можете изменить QList, который вернул items(), но гораздо проще (для вас) и без ошибок создать новый и добавить все QGraphicsLineItem* к этому. Таким образом, вы можете быть уверены, что случайно не пропустите элементы в возвращаемом списке, который вы зацикливаете. Удачи! - person ; 20.06.2020
comment
Спасибо за это :) - person DevOops; 20.06.2020