Qt 如何使QScrollara中QStackedWidget的小部件自动调整大小?
我一直在尝试调整驻留在QScrollara中的QStackedWidget的页面(widget)大小。不幸的是,我没有成功。在搜索某些特定人员之前,第1页小部件(Qt 如何使QScrollara中QStackedWidget的小部件自动调整大小?,qt,qt5,Qt,Qt5,我一直在尝试调整驻留在QScrollara中的QStackedWidget的页面(widget)大小。不幸的是,我没有成功。在搜索某些特定人员之前,第1页小部件(full\u list\u frame)会自动调整大小。但是在搜索之后,第2页小部件(search\u list\u frame)的大小仍然与第1页小部件的大小相同。我所期望的是,堆叠小部件的每个页面都可以根据其布局中的小部件/项目的数量自动调整大小,这意味着如果页面大小不足以滚动,则无法滚动页面 或者这个问题是由QScrollArea
full\u list\u frame
)会自动调整大小。但是在搜索之后,第2页小部件(search\u list\u frame
)的大小仍然与第1页小部件的大小相同。我所期望的是,堆叠小部件的每个页面都可以根据其布局中的小部件/项目的数量自动调整大小,这意味着如果页面大小不足以滚动,则无法滚动页面
或者这个问题是由QScrollArea或其他什么引起的?当我硬编码更改第2页小部件的大小(search\u list\u frame
)并打印出来时。输出显示了更改后的大小,但仍然没有更改屏幕上显示的任何内容
xxx.cpp
void XXX::initComponents()
{
list_scroll_area = new QScrollArea(this);
//list_scroll_area->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
list_scroll_area->setWidgetResizable(true);
list_scroll_area->setStyleSheet("border: 0px solid black;");
list_scroll_area->setFixedHeight(700);
layout->addWidget(list_scroll_area);
full_list_frame = new QFrame(this);
full_list_layout = new QVBoxLayout;
full_list_frame->setLayout(full_list_layout);
search_list_frame = new QFrame(this);
search_list_layout = new QVBoxLayout;
search_list_frame->setLayout(search_list_layout);
search_spacer = nullptr;
stack = new QStackedWidget(this);
list_scroll_area->setWidget(stack);
stack->addWidget(full_list_frame);
stack->addWidget(search_list_frame);
}
void XXX::insertAllPersonItems()
{
for (auto person : persons)
addPerson(person, full_list_layout);
QSpacerItem* si = new QSpacerItem(1, 1, QSizePolicy::Expanding, QSizePolicy::Expanding);
full_list_layout->addItem(si);
}
void XXX::searchForPerson()
{
list_scroll_area->verticalScrollBar()->setSliderPosition(0);
if (search_edit->text().isEmpty()) {
stack->setCurrentIndex(0);
return;
}
for (auto w : widgets) {
delete w;
widgets.removeOne(w);
}
if (search_spacer != nullptr) {
search_list_layout->removeItem(search_spacer);
delete search_spacer;
}
search_spacer = new QSpacerItem(1, 1, QSizePolicy::Expanding, QSizePolicy::Expanding);
stack->setCurrentIndex(1);
for (auto person : persons) {
if (person.info.legal_name.contains(search_edit->text()))
addPerson(person, search_list_layout);
}
search_list_layout->addItem(search_spacer);
}
之前:
之后: