我目前正在构建一个包含多个页面QStackedWidget
的应用程序。页面本身已添加到设计器中。我能做什么(代码中):
这很有效,我可以看到我的小部件出现在页面上。这些小部件的固定高度为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的回答中的行完全一样。我觉得我越来越近了,但这里似乎还有一些错误。
答案 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)
您需要添加valuesLayout
仅QScrollArea
个对象,比方说scrollArea
。
您需要创建QWidget
,scrollArea
,让我们说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