如何向 QSplitter 添加布局?

How to add a layout to QSplitter?

我有一个带 3 列的垂直拆分器。在第二个内部,我想让一些按钮水平对齐,在这些按钮下方有一个 ListWidget。 问题是,我希望在拆分器的第二列内有一个垂直布局 (VBoxLayout) 以对齐列表上方的按钮。但是 Splitter 只接受 addWidget(...),不接受 addLayout(...)。 所以我无法在拆分器中添加 VBoxLayout。 将按钮放在拆分器内的 ListWidget 上方的正确方法是什么?

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

Splitter only accepts addWidget(...), not 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);
...