a way to reset the layout?

  • hi folks. I am thinking about how I can reset the layout for my program. The possible solutions are: QStackedWidget/QStackedLayout or delete the layout and re-create new layout.

    But my question is: is there any way to just demount all the widgets and sublayouts from the main layout without deleting them? So in this case I do not need to re-initialize all the widgets and sublayouts.

  • Lifetime Qt Champion


    Out of curiosity, why do you need that for ?

  • @SGaist hi, I'm trying to make a changeable window layout. If the button is pressed the window layout will change from one form to another.

    I thought QStackedLayout is not good cause I have to create multiple instances for the windows then stack them together. My priority is the efficiency so this seems not very beneficial for me.

    I tried to delete the layout and re-create the layout. It worked, but the program seems so unstable. It will crash with no reason.

  • Combination of:
    void QLayout::removeItem(QLayoutItem *item)
    void QLayout::removeWidget(QWidget *widget)

    or if you only need widgets:
    QLayoutItem *QLayout::replaceWidget(QWidget *from, QWidget *to, Qt::FindChildOptions options = Qt::FindChildrenRecursively)

    Even though I did not see a single case when such approach would provide any advantage it probably may exist.

  • @alex_malyu hi, thnx for the reply. The thing is every instance has a lots of update functions in it. If I create one more instance and just hide it using QStackedLayout, the update functions will still be called in background and it's not friendly for the RAM.

    maybe there's a way to re-write it so the update functions will only be called when the parents Widget is shown.

  • @qtpi
    look at QWidget::setUpdatesEnabled(
    call it on widget parent of layout you change, make changes, re-enable


  • @alex_malyu they look very interesting, I'm gonna do some research. Thanks for the help!

Log in to reply