C++ 在滚动区域中使用自定义Qt类,并强制不调整元素大小,而是显示滚动条

C++ 在滚动区域中使用自定义Qt类,并强制不调整元素大小,而是显示滚动条,c++,qt,C++,Qt,我花了几天时间试图解决这个问题,但没有取得任何进展,我想我遗漏了什么,请帮我解决 在主窗口中,我创建了滚动区域并给它垂直布局。我已经创建了Qt设计器类(myform.h、myform.cpp和myform.ui),并放置了一些按钮和垂直布局 这是“myform.ui”: 我希望主窗口中的滚动区域包含“myform.ui”,并且“myform.ui”中的元素不会被调整大小,而是滚动条出现在滚动区域中 我的mainwindow.cpp是 #include "mainwindow.h" #includ

我花了几天时间试图解决这个问题,但没有取得任何进展,我想我遗漏了什么,请帮我解决

在主窗口中,我创建了滚动区域并给它垂直布局。我已经创建了Qt设计器类(myform.h、myform.cpp和myform.ui),并放置了一些按钮和垂直布局

这是“myform.ui”:

我希望主窗口中的滚动区域包含“myform.ui”,并且“myform.ui”中的元素不会被调整大小,而是滚动条出现在滚动区域中

我的mainwindow.cpp是

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "myform.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    MyForm* myform = new MyForm(this);
    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(myform);

    ui->scrollArea->setWidgetResizable(false);
    ui->scrollArea->setLayout(layout);

}

MainWindow::~MainWindow()
{
    delete ui;
}
问题是滚动条不会出现,并且在调整窗口大小时,元素的大小正在调整

图片:


这只是一个简单的例子来说明我遇到的问题。

根据的文档,您似乎必须将背景小部件设置到滚动区域。此代码直接取自
QScrollArea
小部件的文档:

QLabel *imageLabel = new QLabel;
QImage image("happyguy.png");
imageLabel->setPixmap(QPixmap::fromImage(image));

scrollArea = new QScrollArea;
scrollArea->setBackgroundRole(QPalette::Dark);
scrollArea->setWidget(imageLabel);
制作图像标签。一个pixmap被加载到其中。然后,滚动区域小部件由
setWidget()
命令指定

在您的代码中,我认为
ui->scrollArea->setLayout(布局)

应该是

ui->scrollArea->setWidget(布局)取而代之

注意:我还没有测试过这段代码,但我认为它会解决您的问题