How force a widget to fill the empty space of another hidden widget?
-
Hi,
What exact layout are you using ?
Grids can be achieved using QGridLayout but also a combination of QVBoxLayout and QHBoxLayout.
-
Hi,
What exact layout are you using ?
Grids can be achieved using QGridLayout but also a combination of QVBoxLayout and QHBoxLayout.
-
In that case you have to change the span of widget 1 when hiding widget 2. This likely means that you have to pull widget one of the grid and put it back in with the appropriate span value.
-
In that case you have to change the span of widget 1 when hiding widget 2. This likely means that you have to pull widget one of the grid and put it back in with the appropriate span value.
wrote on 23 Apr 2019, 19:57 last edited by@SGaist I can use resize() only when there is no Layout. When I set the grid layout the resize does not work. When there are only two vertical widgets (in my example 1 and 3), it works perfectly.
But, with all the four widgets:
- If I only hide number 3, number 1 does NOT extend.
- If I hide both number 3 and number 4 then number 1 and 2 extend and fill the empty place bellow them.
It looks the grid system wants 1 and 2 be have same height.
-
@SGaist I can use resize() only when there is no Layout. When I set the grid layout the resize does not work. When there are only two vertical widgets (in my example 1 and 3), it works perfectly.
But, with all the four widgets:
- If I only hide number 3, number 1 does NOT extend.
- If I hide both number 3 and number 4 then number 1 and 2 extend and fill the empty place bellow them.
It looks the grid system wants 1 and 2 be have same height.
@Bamshad there are a couple of ways to do this, Like @SGaist said, is one.
If you don't force stretch factors and set the size policy to expanding, then you don't have to do anything. Like in this small example:
int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget w; QVBoxLayout *vLay = new QVBoxLayout(&w); QPushButton *btn = new QPushButton("Hide/Show"); QGridLayout *gLay = new QGridLayout; QLabel *l = new QLabel("Widget 1"); l->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); l->setStyleSheet("background-color:red;"); gLay->addWidget(l,0,0,1,1); l = new QLabel("Widget 2"); l->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); l->setStyleSheet("background-color:blue;"); QObject::connect(btn, &QPushButton::clicked, l, [l]()->void{l->setVisible(!l->isVisible());}); gLay->addWidget(l,0,1,1,1); l = new QLabel("Widget 3"); l->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); l->setStyleSheet("background-color:yellow;"); QObject::connect(btn, &QPushButton::clicked, l, [l]()->void{l->setVisible(!l->isVisible());}); gLay->addWidget(l,1,0,1,1); l = new QLabel("Widget 4"); l->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); l->setStyleSheet("background-color:green;"); QObject::connect(btn, &QPushButton::clicked, l, [l]()->void{l->setVisible(!l->isVisible());}); gLay->addWidget(l,1,1,1,1); vLay->addLayout(gLay,1); vLay->addWidget(btn); w.show(); return a.exec(); }
-
I didn't mention resize at any point. I wrote about the span values that you can use to make widgets use more than one column/row.
-
I didn't mention resize at any point. I wrote about the span values that you can use to make widgets use more than one column/row.
-
I already suggested a possible way to implement that, didn't I ?
-
You'll see them once you add the widgets where you want them.
11/11