Qt 如何使QScrollara中QStackedWidget的小部件自动调整大小?

Qt 如何使QScrollara中QStackedWidget的小部件自动调整大小?,qt,qt5,Qt,Qt5,我一直在尝试调整驻留在QScrollara中的QStackedWidget的页面(widget)大小。不幸的是,我没有成功。在搜索某些特定人员之前,第1页小部件(full\u list\u frame)会自动调整大小。但是在搜索之后,第2页小部件(search\u list\u frame)的大小仍然与第1页小部件的大小相同。我所期望的是,堆叠小部件的每个页面都可以根据其布局中的小部件/项目的数量自动调整大小,这意味着如果页面大小不足以滚动,则无法滚动页面 或者这个问题是由QScrollArea

我一直在尝试调整驻留在QScrollara中的QStackedWidget的页面(widget)大小。不幸的是,我没有成功。在搜索某些特定人员之前,第1页小部件(
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);
}
之前:

之后: