垂直滚动的 QScrollArea 问题
QScrollArea issue with vertical scroll
我已经阅读了几页有关 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->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
强制隐藏水平滚动条
您也可以始终使用 area->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
强制显示垂直滚动条,但这本身并不能解决您的问题。您在 300 像素的区域内仍然有一个 300 像素的小部件,并且滚动条不会有任何 space 可以移动。
确保 QWidget 足够大以容纳它包含的所有内容是您想要做的,QScrollArea 将进行调整。通常我们为此使用布局,但您也可以手动使其工作。
我已经阅读了几页有关 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->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
您也可以始终使用 area->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
强制显示垂直滚动条,但这本身并不能解决您的问题。您在 300 像素的区域内仍然有一个 300 像素的小部件,并且滚动条不会有任何 space 可以移动。
确保 QWidget 足够大以容纳它包含的所有内容是您想要做的,QScrollArea 将进行调整。通常我们为此使用布局,但您也可以手动使其工作。