Как добавить макет в QSplitter? - PullRequest
0 голосов
/ 19 ноября 2018

У меня вертикальный сплиттер с 3 колонками. Внутри второго я хочу, чтобы некоторые кнопки были выровнены по горизонтали, а под этими кнопками есть ListWidget. Проблема в том, что я хотел бы иметь вертикальный макет (VBoxLayout) во втором столбце сплиттера, чтобы выровнять кнопки над списком. Но Splitter принимает только addWidget (...), но не addLayout (...). Поэтому я не могу добавить VBoxLayout внутри сплиттера. Как правильно расположить кнопку над ListWidget внутри сплиттера?

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

1 Ответ

0 голосов
/ 20 ноября 2018

Splitter принимает только addWidget (...), но не addLayout (...)

Это предложение дает решение. Создайте новый объект QWidget и установите для него QVBoxLayout. Добавьте то, что вы хотите в макет и добавить виджет в сплиттер.

В вашем случае:

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);
...
...