无法在滚动区域Qt中将项目对齐到顶部

时间:2018-02-07 14:28:37

标签: qt alignment qscrollarea

在Qt Widget应用程序中,我正在尝试进行以下操作:

Example

我的目标是创建一个带有scrollArea的表单,其中包含垂直布局,滚动区域中的每个项目都在顶部对齐。

不幸的是,它只停留在这里显示的中心:

Incorrect, should be at the top

我已经尝试选择scrollArea并将AlignVCenter中的垂直对齐方式转换为AlignTop,但这似乎没有效果。

Alignment

如何将所有内容对齐到滚动框的顶部?

1 个答案:

答案 0 :(得分:0)

您可以使用QListWidget来保存不仅包含文字,还包含QWidget 的列表(例如按钮,线路编辑等)

只需在窗口中添加QListWidget,然后在C ++中根据需要将小部件添加到QListWidget

以下是在QListWidget中插入按钮的一些步骤:

在您的应用程序中创建一个QListWidget项。

ss

更改selectionMode = NoSelectionfocusPolocy = NoFocus

enter image description here

enter image description here

将以下C ++代码放入您的应用程序中:

// Create list item
QListWidgetItem *listWidgetItem = new QListWidgetItem();

// Create widget
QWidget *widget = new QWidget();
QVBoxLayout *verticalLayout = new QVBoxLayout();
verticalLayout->setSizeConstraint(QLayout::SetFixedSize);
widget->setLayout(verticalLayout);

// Add button to widget layout
QPushButton *pushButton = new QPushButton("Button!");
verticalLayout->addWidget(pushButton);

// Add list item to ul->listWidget
listWidgetItem->setSizeHint(widget->sizeHint()); // Set the size of the list item to the same as the widget
ui->listWidget->addItem(listWidgetItem);
ui->listWidget->setItemWidget(listWidgetItem, widget);

旧回答:

我找到了答案here,但我会将其重新发布给其他感兴趣的人。

要对齐滚动区域顶部的元素,请将作为子项的垂直布局添加到滚动区域,并将所有元素放在该垂直布局中。 像这样:

Screenshot

在C ++中,使用spacer item在滚动区域内的垂直布局中添加addStretch()

ui->verticalLayout->addStretch();

现在所有物品都应该神奇地与顶部对齐。

修改

这似乎只适用于第一个项目,而所有其他项目都没有被推到顶部。