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

我已经创建了自己的小部件,我将从代码中添加到另一个小部件中 . 表单小部件使用qtCreator创建 . 我已经将“子窗口小部件”安排到verticalLayout中以便将一个放在另一个下面,但由于插入的窗口小部件的数量不固定,我需要有一个滚动条 . 所以我将verticalLayout放入scrollArea,但滚动条永远不会出现,为什么?结构“father-> child”如下:formWidget-> scrollArea-> verticalLayout谢谢

编辑:问题如下:我是从QPushButton的单击槽创建窗口小部件:在该窗口小部件的costructor中,我创建了一个QScrollArea和一个VerticalLayout . 在布局中插入了我想要的所有小部件后,我将布局添加到scrollArea . 这是错误的:为了使从按钮创建的小部件中的scrollArea可见,需要在滚动条中直接从单击的插槽代码中插入该小部件 . 有关更多详细信息,我附加了单击的插槽和小部件构造函数的代码

按钮插槽(点击)

scrollArea= new QScrollArea;
scheduleWindow = new Schedule(traceFilePath);
scrollArea->setWidget(scheduleWindow);
scrollArea->resize(scheduleWindow->getWidth(), scheduleWindow->getHeight());
QRect rec = QApplication::desktop()->screenGeometry();
unsigned int desktopHeight = rec.height();
unsigned int desktopWidth = rec.width();
if(scheduleWindow->getWidth() > desktopWidth ||
   scheduleWindow->getHeight() > desktopHeight)
    scrollArea->showMaximized();
else
    scrollArea->show();

小部件构造函数

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();

}

回答(2)

2 years ago

你必须放置一个scrollArea,就像你说的那样 . 然后拖动您想要在该区域内“滚动”的所有项目 . 一旦它们在scrollArea中,您应该选择它并设置布局,垂直或水平 . 然后,当您调整窗口小部件的大小时,会在需要时显示scrollBar .

你能不能用一些照片说明我们 . 所以我们可以理解这个问题?看起来像是一个图形问题,所以很难引导你没有东西看......

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

2 years ago

垂直布局中的项目是否超出高度/宽度限制,因此需要滚动条?据我所知,滚动条只会在超出这些尺寸后显示(尽管你应该可以改变这种行为) .