質問

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 ?

役に立ちましたか?

解決

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:

  • Look up all the items of the layout.

  • Check if it is a spacer item.

  • If it is, remove it.

他のヒント

You should not to delete QLayoutItem if you add it to QLayout. It's QLayout responsibility to delete it children.

Note: The ownership of item is transferred to the layout, and it's the layout's responsibility to delete it.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top