C++ 使用qtcreator在qt小部件中插入滚动条

C++ 使用qtcreator在qt小部件中插入滚动条,c++,qt,layout,qscrollarea,C++,Qt,Layout,Qscrollarea,我已经创建了我自己的小部件,我将从代码中放入另一个小部件中。表单小部件是使用qtCreator创建的。我已经将“子部件”排列成一个垂直布局,以便将一个放置在另一个之下,但是由于插入的部件的数量不是固定的,所以我需要一个滚动条。 所以我把我的垂直布局放在了一个滚动区域,但是滚动条从来没有出现过,为什么?“父->子”结构如下: formWidget->scrollArea->verticalLayout 谢谢 编辑:问题如下:我是从QPushButton的单击槽中创建小部件的: 在该小部件的构造器中

我已经创建了我自己的小部件,我将从代码中放入另一个小部件中。表单小部件是使用qtCreator创建的。我已经将“子部件”排列成一个垂直布局,以便将一个放置在另一个之下,但是由于插入的部件的数量不是固定的,所以我需要一个滚动条。 所以我把我的垂直布局放在了一个滚动区域,但是滚动条从来没有出现过,为什么?“父->子”结构如下: formWidget->scrollArea->verticalLayout 谢谢

编辑:问题如下:我是从QPushButton的单击槽中创建小部件的: 在该小部件的构造器中,我创建了一个QScrollArea和一个垂直布局。 在布局中插入了我想要的所有小部件之后,我将布局添加到scrollArea。 这是错误的:为了使从按钮创建的小部件中的滚动区域可见,必须直接从单击的插槽代码将该小部件插入滚动条中。 为了获得更详细的信息,我附加了单击的插槽和小部件构造函数的代码

Schedule::Schedule(QString pathname, QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Schedule)
{
     ui->setupUi(this);

    traceParser parser(pathname);
    parser.readJson();
    ArchitectureParameter arch = parser.getArchParam();

    QString taskName;

    unsigned int nTasks = 0;
    TaskSchedule *t;
    for(std::list<QString>::iterator taskNameIter = parser.getTaskNames().begin();
        taskNameIter != parser.getTaskNames().end(); taskNameIter++)
    {
        taskName = *taskNameIter;
        nTasks++;
        cout<<taskName.toStdString()<<endl;
        t = new TaskSchedule(this , taskName, 80, arch.nCPU(), arch.maxTime(),
                                          parser.getExecList(taskName), parser.getTaskSimpleEventsMap(taskName));
        ui->pageLayout->addWidget(t);
    }
    cout<<nTasks<<endl;
    width = 2*t->getLineXPosStart() + t->getTickLength()*arch.maxTime();
    height = nTasks*(2*TASKSCH_Y_OFFSET + arch.nCPU()*t->getCpuHeight());
    ui->area->resize(width, height);
    ui->area->setMinimumSize(width, height);
    this->adjustSize();

} 
按钮槽(单击)

小部件构造函数

Schedule::Schedule(QString pathname, QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Schedule)
{
     ui->setupUi(this);

    traceParser parser(pathname);
    parser.readJson();
    ArchitectureParameter arch = parser.getArchParam();

    QString taskName;

    unsigned int nTasks = 0;
    TaskSchedule *t;
    for(std::list<QString>::iterator taskNameIter = parser.getTaskNames().begin();
        taskNameIter != parser.getTaskNames().end(); taskNameIter++)
    {
        taskName = *taskNameIter;
        nTasks++;
        cout<<taskName.toStdString()<<endl;
        t = new TaskSchedule(this , taskName, 80, arch.nCPU(), arch.maxTime(),
                                          parser.getExecList(taskName), parser.getTaskSimpleEventsMap(taskName));
        ui->pageLayout->addWidget(t);
    }
    cout<<nTasks<<endl;
    width = 2*t->getLineXPosStart() + t->getTickLength()*arch.maxTime();
    height = nTasks*(2*TASKSCH_Y_OFFSET + arch.nCPU()*t->getCpuHeight());
    ui->area->resize(width, height);
    ui->area->setMinimumSize(width, height);
    this->adjustSize();

} 
Schedule::Schedule(QString路径名,QWidget*父项):
QWidget(母公司),
ui(新ui::计划)
{
用户界面->设置用户界面(此);
traceParser解析器(路径名);
readJson();
架构参数arch=parser.getArchParam();
QString任务名;
无符号整数nTasks=0;
任务计划*t;
for(std::list::iterator taskname iter=parser.getTaskNames().begin();
taskNameIter!=解析器.getTaskNames().end();taskNameIter++)
{
taskName=*tasknamiter;
nTasks++;
coutarea->setMinimumSize(宽度、高度);
此->调整大小();
} 

垂直布局中的项目是否超出了高度/宽度限制,因此需要滚动条?据我所知,滚动条仅在超出这些尺寸后才会显示(不过您应该能够更改此行为)。

您必须像您所说的那样放置一个滚动区域。 然后在该区域内拖动所有要“滚动”的项目。 一旦它们进入滚动区域,您应该选择它并设置垂直或水平布局。 然后,当您调整小部件的大小时,滚动条会在需要时出现

你能不能给我们举一些图片,这样我们就可以理解这个问题了? 看起来像是一个图形问题,所以如果没有可以查看的内容,很难指导您

编辑:我相信为了重新排列布局中的“子部件”,首先必须定义这些“子部件”的父部件,即布局本身