2

我目前正在构建一个包含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 中?

更新:应用下面提到的更改后,我最终得到了这个: 在此处输入图像描述

我现在的代码看起来与 Shf 的答案中给出的行完全一样。我感觉我越来越近了,但这里似乎还是有些不对劲。

4

2 回答 2

4

您必须为滚动区域设置一个小部件并将内容添加到该小部件:

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);
于 2014-01-21T08:37:37.573 回答
2

valuesLayout您只需要添加到QScrollArea对象,比如说scrollArea. 你需要创建QWidget,这将是在scrollArea,比方说scrollWidget,设置QVBoxLayoutscrollWidget,比方说scrollLayout,现在您可以将小部件添加到scrollLayout并且它们将出现在您的内部QScrollArea,所以代码应该看起来像这样(这有点棘手和令人困惑,但会很容易及时):

//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
于 2014-01-20T15:25:42.813 回答