如何动态地将QScrollArea添加到StackedWidget页面并向其添加小部件?

时间:2014-01-20 14:41:29

标签: c++ qt qwidget qt4.8 qscrollarea

我目前正在构建一个包含多个页面QStackedWidget的应用程序。页面本身已添加到设计器中。我能做什么(代码中):

  • 向页面添加QVBoxLayout
  • 添加一些自定义小部件
  • 设置页面的布局

这很有效,我可以看到我的小部件出现在页面上。这些小部件的固定高度为25.当小部件太多时,我看不到所有小部件。不起作用的是在页面中添加QScrollArea,允许向上和向下滚动,以防页面中添加了大量小部件。

所以这是我的代码“按原样”:

//The header file:

QVBoxLayout *valuesLayout;

//The corresponding .cpp file

valuesLayout = new QVBoxLayout();
valuesPage->setLayout(valuesLayout);  //valuesPage is my QStackedWidget page
for (int j=0; j<100; j++)
{
    valuesLayout->addWidget(new PaIndicator(0, "This is a test", 0));  // my custom widgets
}

我如何更改/扩展上面的代码以使我的小部件出现在QScrollArea中?

更新 :应用下面提到的更改后,我最终得到了以下信息: enter image description here

我现在的代码看起来与Shf的回答中的行完全一样。我觉得我越来越近了,但这里似乎还有一些错误。

2 个答案:

答案 0 :(得分:4)

您必须set a widget到滚动区域并将内容添加到该小部件:

QScrollArea *scrollArea = new QScrollArea;
QWidget *scrollWidget = new QWidget;
scrollWidget->setLayout(new QVBoxLayout);
scrollArea->setWidget(scrollWidget);
for (int j=0; j<100; j++)
{
   scrollWidget->layout()->addWidget(new PaIndicator(0, "This is a test", 0));  // my custom widgets
}

然后将滚动区域添加到堆叠小部件的页面:

valuesLayout->addWidget(scrollArea);

答案 1 :(得分:1)

您需要添加valuesLayoutQScrollArea个对象,比方说scrollArea。 您需要创建QWidgetscrollArea,让我们说scrollWidget,并为QVBoxLayout设置scrollWidget,让我们说scrollLayout,现在你可以将你的小部件添加到scrollLayout,它们会显示在你的QScrollArea内,所以代码看起来应该是这样的(它有点棘手和cofusing,但很容易及时):

//The header file:

QVBoxLayout *valuesLayout;
QVBoxLayout *scrollLayout;
QScrollArea *scrollArea;
QWidget *scrollWidget;

//The corresponding .cpp file
    valuesLayout = new QVBoxLayout(); // creating layout for valuesPage
    scrollArea=new QScrollArea(valuesPage); // creates scrollarea, and set valuesPage as it's parent
    scrollWidget =new QWidget(scrollArea);  // creates scrollwidget, your scrollArea as parent
    scrollLayout = new QVBoxLayout(scrollWidget); // creating layout in scrollWidget
    for (int j=0; j<100; j++)
    {
        scrollLayout->addWidget(new PaIndicator(0, "This is a test", 0));  // adding your widgets to scrolllayout
    }
    scrollArea->setWidget(scrollWidget);  // sets scrollArea around scrollWidget
    valuesPage->setLayout(valuesLayout);  //valuesPage is my QStackedWidget page
    valuesLayout->addWidget(scrollArea ); // adding scrollwidget to your mainlayout
相关问题