我看过几页有关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的简化版本)。
答案 0 :(得分:2)
除非内部的QWidget增长,否则QScrollArea不会获得滚动条。只是将一些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);
显示垂直滚动条,但这本身并不能解决您的问题。在300px区域内仍然有300px小部件,滚动条没有任何移动空间。
确保QWidget足够大,它包含的内容就是你想要做的,QScrollArea会适应。通常我们会使用布局,但您也可以手动使用它。