gpt4 book ai didi

c++ - Qt Scroll Area 不添加滚动条

转载 作者:行者123 更新时间:2023-11-30 02:01:00 28 4
gpt4 key购买 nike

大家好,我必须根据用户输入动态创建按钮,因此如果用户输入的数字很大,则包含按钮的小部件必须能够上下滚动。出于这个原因,我正在使用 QScrollArea。我在 Qt 设计器中生成模板,UIC 为我生成代码,然后我在我的部分添加应该处理按钮的动态创建。但是,我似乎无法让垂直滚动条出现。这是代码的相关部分。

    verticalWidget = new QWidget(FWHMWorkflowDialog);
verticalWidget->setObjectName(QString::fromUtf8("verticalWidget"));
verticalWidget->setMinimumSize(QSize(150, 0));
verticalWidget->setMaximumSize(QSize(150, 16777215));
verticalLayout_5 = new QVBoxLayout(verticalWidget);
verticalLayout_5->setObjectName(QString::fromUtf8("verticalLayout_5"));
scrollArea = new QScrollArea(verticalWidget);
scrollArea->setObjectName(QString::fromUtf8("scrollArea"));
scrollArea->setMaximumSize(QSize(150, 16777215));
scrollArea->setWidgetResizable(true);
scrollAreaWidgetContents = new QWidget();
scrollAreaWidgetContents->setObjectName(QString::fromUtf8("scrollAreaWidgetContents"));
scrollAreaWidgetContents->setGeometry(QRect(0, 0, 130, 432));

numberOfSlices = numberSlices;
for (int i = 0; i < numberOfSlices; i++)
{
QWidget *horizontalWidget = new QWidget(scrollAreaWidgetContents);
horizontalWidget->setMaximumSize(150,40);
horizontalWidget->setGeometry(QRect(0, i*40, 150, 40));
hWidgetList.push_back(horizontalWidget);

QHBoxLayout *hLayout = new QHBoxLayout(horizontalWidget);
hLayoutList.push_back(hLayout);
hLayout->setSizeConstraint(QLayout::SetMinimumSize);
hLayout->setContentsMargins(-1, 1, -1, 1);

QPushButton *pushButton = new QPushButton(horizontalWidget);
pushButtonList.push_back(pushButton);
QString temp = QString("m_sliceButton").arg(i);
pushButtonList[i]->setObjectName(temp);
pushButtonList[i]->setGeometry(QRect(10, 20+i*40, 98, 27));
hLayout->addWidget(pushButton);

QCheckBox *checkBox = new QCheckBox(horizontalWidget);
checkBoxList.push_back(checkBox);
temp = QString("m_checkBox").arg(i);
checkBoxList[i]->setObjectName(temp);
checkBoxList[i]->setEnabled(true);
checkBoxList[i]->setGeometry(QRect(110, 20+i*40, 21, 22));

hLayout->addWidget(checkBox);

}

scrollArea->setWidget(scrollAreaWidgetContents);
//scrollArea->setWidgetResizable(true);

verticalLayout_5->addWidget(scrollArea);

输出窗口总是如下所示。

enter image description here

在此示例中,用户输入的是 25,但您可以看到第 21 个按钮被截断,另外 4 个按钮不可见。

滚动功能开始工作后出现的大小窗口问题。

enter image description here

最佳答案

您需要像这样将 horizo​​ntalWidget 添加到垂直小部件:

QVBoxLayout* vLayout = new QVBoxLayout();

for (int i = 0; i < numberOfSlices; i++)
{
QWidget *horizontalWidget = new QWidget();
vLayout->addWidget(horizontalWidget);
....
}
scrollAreaWidgetContents->setLayout(vLayout);

你的第二个问题看起来像是来自这一行:

scrollArea = new QScrollArea(verticalWidget);

您正在将 scrollArea 直接添加到 verticalWidget,但要使其按照您希望的方式进行布局,您需要将其放入布局中。请尝试以下操作:

QVBoxLayout* l = new QVBoxLayout();
l->addWidget(sliceLabel); // or whatever you call it
l->addWidget(scrollArea);
l->addWidget(clearButton); // again, your name here
verticalWidget->setLayout(l);

关于c++ - Qt Scroll Area 不添加滚动条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14631462/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com