Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

How to set stretch in proper way in QGridLayout?



  • Hi,

    I would like to have a red QGridLayout. In this grid I would like to have a green QGridLayout and blue GridLayout.
    In this blue QGridLayout I would like to have 4 QLabels ( yellow ).

    I would like to set 3 in the first ( zero if we start from zero ) row stretch in red QGridLayout and I would like don't add any widgets to green QGridLayout.
    I would like to set 2 in the second ( first if we start from zero) row stretch in red QGridLayout.

    So my goal is have picture on the left. Now I have situation on the right picture.

    want.png

    My code:
    ( whole - red QGridLayout, info - blue, images - green, l1,l2,l3,l4 - labels )

        whole = new QGridLayout;
        info = new QGridLayout;
        images = new QGridLayout;
    
        l1 = new QLabel("aaaaaa");
        l2 = new QLabel("bbbbbbb");
        l3 = new QLabel("cccccccc");
        l4 = new QLabel("ddddddd");
    
        l1->setStyleSheet("QLabel {background:red}");
        l2->setStyleSheet("QLabel {background:red}");
        l3->setStyleSheet("QLabel {background:red}");
        l4->setStyleSheet("QLabel {background:red}");
    
        l1->setSizePolicy(QSizePolicy::Ignored,QSizePolicy::Ignored);
        l2->setSizePolicy(QSizePolicy::Ignored,QSizePolicy::Ignored);
        l3->setSizePolicy(QSizePolicy::Ignored,QSizePolicy::Ignored);
        l4->setSizePolicy(QSizePolicy::Ignored,QSizePolicy::Ignored);
    
        info->addWidget(l1,0,0);
        info->addWidget(l2,0,1);
        info->addWidget(l3,1,0);
        info->addWidget(l4,1,1);
    
        whole->addLayout(images,0,0);
        whole->addLayout(info,1,0);
    
        whole->setRowStretch(0,3);
        whole->setRowStretch(1,2);
    


  • @TomNow99

    If you dont want to make further changes (overall result should look like the example on the left), you dont need three QGridLayouts. Only the blue one has to be a grid.

    • Red (VBoxLayout)
      • Green Layout ( 1/2 size of red)
      • Blue (GridLayout for yellow content) (1/2 size of red)


  • But why my code doesn't works?



  • @TomNow99
    Your drawing is vivid as usual :)
    It seems that the stretch factor will be ignored for an empty layout.
    If you really need to put an empty square here, I suggest you to use a QWidget instead of just a QGridLayout.
    You can set a QGridLayout to that QWidget if you need to add items to the square later.


Log in to reply