gpt4 book ai didi

c++ - 垂直滚动的 QScrollArea 问题

转载 作者:行者123 更新时间:2023-11-30 03:57:35 25 4
gpt4 key购买 nike

我已经阅读了一些关于 QScrollArea 的页面,但我无法解决我的问题。我有下一个代码:

QDialog *window = new QDialog;
window->resize(300, 300);

for(int i = 0; i < 50; ++i)
{
QLabel *label = new QLabel(window);
label->move(10, i * 15);
label->setText("Text");
}

QScrollArea *area = new QScrollArea;
area->setWidget(window);
area->show();

QScrollArea 的垂直滚动似乎没有出现。我不能使用 QVBoxLayout,因为在我的 QDialog 上我没有只有垂直对齐的 QLabel(这只是我的 QDialog 的简化版本)。

最佳答案

QScrollArea 不会有滚动条,除非里面的 QWidget 增长。只是将一些 QLabel 移出边界不会使父 QWidget 增长,尤其是在没有 QLayout 的情况下。

但是,如果您手动调整它们的大小,使 QWidget 大于 QScrollAreay,您将获得预期的滚动条:

QDialog *window = new QDialog;
window->resize(300, 600); //< 600px high widget

for(int i = 0; i < 50; ++i)
{
QLabel *label = new QLabel(window);
label->move(10, i * 15);
label->setText("Text");
}

QScrollArea *area = new QScrollArea;
area->setWidget(window);
area->resize(300,300); //< Inside a 300px high scrollarea, expect scrollbars!
area->show();

请注意,现在您将拥有两个 滚动条,因为垂直滚动条意味着我们的 300px 宽度不再有足够的空间。您可以使用 area->setHorizo​​ntalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

强制隐藏水平滚动条

您也可以始终使用 area->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); 强制显示垂直滚动条,但这本身并不能解决您的问题。您在 300 像素的区域内仍然有一个 300 像素的小部件,并且滚动条没有任何移动空间。

确保 QWidget 足够大以容纳它包含的所有内容是您想要做的,QScrollArea 将进行调整。通常我们为此使用布局,但您也可以手动使其工作。

关于c++ - 垂直滚动的 QScrollArea 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27882746/

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