How to add a layout to QSplitter?

1.8k Views Asked by At

I have a vertical splitter with 3 Columns. Inside of the second one I want to have some Buttons aligned horizontally and below these buttons there is a ListWidget. The problem is, that I would want to have a vertical Layout (VBoxLayout) inside the second column of the splitter to align the buttons above the List. But the Splitter only accepts addWidget(...), not addLayout(...). So I can't add the VBoxLayout inside of the splitter. What's the correct way to put the button above the ListWidget inside of the splitter?

+--------------------------------------+
| column1 |    column2       | column3 |
|  .....  | button1,button2, | ....... |
|  .....  | ListElement1     | ....... |
|  .....  | ListElement2     | ....... |
|  .....  | ListElement3     | ....... |
|  .....  |  .........       | ....... |
+--------------------------------------+
1

There are 1 best solutions below

0
On BEST ANSWER

Splitter only accepts addWidget(...), not addLayout(...)

That sentence gives the solution. Create a new QWidget object and set a QVBoxLayout to it. Add what you want to the layout and add the widget to the splitter.

In your case:

auto *splitter = new QSplitter(this);
auto *widget = new QWidget(this);
auto *layoutColumn = new QVBoxLayout(widget);
auto *layoutButtons = new QHBoxLayout();
auto *btn1 = new QPushButton(tr("Button 1"), this);
auto *btn2 = new QPushButton(tr("Button 2"), this);
auto *list = new QListWidget(this);

layoutButtons->addWidget(btn1);
layoutButtons->addWidget(btn2);

layoutColumn->addLayout(layoutButtons);
layoutColumn->addWidget(list);

...
splitter->addWidget(widget);
...