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

Insert a scrollbar in a qt widget using qtcreator

本文关键字:插入 滚动条 小部 qtcreator qt 使用      更新时间:2023-10-16

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

编辑:问题如下:我是从QPushButton的点击槽创建小部件:在这个小部件的构造函数中,我创建了一个QScrollArea和一个vertical allayout。在布局中插入我想要的所有小部件之后,我将布局添加到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();
} 

你必须放置一个scrollArea,就像你说的。然后将所有你想要"可滚动"的项目拖到该区域内。一旦它们进入了scrollArea,你就应该选择它并设置一个垂直或水平的布局。然后,当您调整小部件的大小时,scrollBar会在需要时出现。

你能给我们一些图片说明一下吗?这样我们就能理解问题了?似乎是一个图形问题,所以如果没有东西可以看,很难指导你…

编辑:我认为为了重新排列布局中的"子部件",首先你必须定义这些"子部件"的父部件,即布局本身。

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