首页 > 解决方案 > 如何向 QSplitter 添加布局?

问题描述

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

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

标签: qtlayoutsplitter

解决方案


Splitter 只接受 addWidget(...),不接受 addLayout(...)

那句话给出了解决方案。创建一个新QWidget对象并QVBoxLayout为其设置 a 。将您想要的内容添加到布局并将小部件添加到拆分器。

在你的情况下:

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

推荐阅读