使用qtcreator

时间:2015-08-12 12:50:56

标签: c++ qt layout qscrollarea

我已经创建了自己的小部件,我将从代码中添加到另一个小部件中。表单小部件使用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 个答案:

答案 0 :(得分:1)

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

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

编辑:我相信为了重新排列&#34;子小部件&#34;在布局中,首先必须定义这些&#34;子小部件的父级&#34;布局本身。

答案 1 :(得分:0)

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