我读过几页关于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上,并不是只有QLabels垂直对齐(这只是一个简化的QDialog版本)。
发布于 2015-01-11 00:47:39
除非内部的QScrollArea增长,否则QWidget不会得到滚动条。仅仅将一些QLabels移出边界并不能使父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();请注意,现在您将两个滚动条,因为垂直滚动条意味着没有足够的空间,我们的300‘t宽度了。您可以使用area->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);强制隐藏水平滚动条。
您也可以总是强迫垂直滚动条与area->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);一起出现,但这本身并不能解决您的问题。在300‘t区域中仍然有一个300’t小部件,滚动条将没有任何移动空间。
确保QWidget足够大,它包含的一切都是您想要做的,QScrollArea将进行调整。通常我们使用布局,但你也可以让它的手工工作。
https://stackoverflow.com/questions/27882746
复制相似问题