c++qtqtguiqlayout

delete all QSpacerItem from a layout


I've added a QSpacerItem to a layout using its addStretch() method.

layout->addStretch(1);

now i'd like to delete it but i didn't have any reference to it.

how can I browse all QLayoutItem and only delete QSpacerItem ?


Solution

  • I would personally write this:

    for (int i = 0; i < layout->count(); ++i) {
        QLayoutItem *layoutItem = layout->itemAt(i);
        if (layoutItem->spacerItem()) {
            layout->removeItem(layoutItem);
            // You could also use: layout->takeAt(i);
            delete layoutItem;
            --i;
        }
    }
    

    So, the logic would be this in a nutshell if the code does not make it clear: