做一个MainWindow 时候,根据需要,要求窗体能够局部滚动。于是想到了QScrollArea的使用.
首先我是基于UI的MainWindow。所以首先在自己想要滚动的区域拖一个ScrollArea 控件,到想要放到的地方。
这是你会发现在designer的右侧边栏里多了这样的结构(发不上图片??)
scrollArea
----scrollWidget(变量名字我修改的,原始不是这个)
其中的会自动的增加一个scrollWidget这个就是真正要滚动的区域。
这样就可以使用了滚动了,但是如果仅仅这样,还不能够滚动。
因为scrollarea只有在窗体内容超出窗体范围时候才会滚动。然而不幸的是,如果你使用了布局管理器,像下面这样:
QVBoxLayout *layout = new QVBoxLayout(this);
for(int i =0;i<200;i++)
{
layout->addWidget(new QLabel(tr("hello world")));
}
ui->scrollWidget->setLayout(layout);
你会发现永远不会滚动。这时因为布局管理器QVBoxLayout,根据其setLayout到的窗口的当前大小分配空间给其中的每一个控件。所以你将看到的是一堆挤在一起的Label。
如何才能滚动呢,通过上面的解释我们得到这样的结论。既然layout是根据被set到的窗口的当前大小分配给每一个控件空间的,那么我们只要改变当前scrollArea的widget的size,使size成为我们需要的尺寸(其大小应该超出了当前窗口的客户区的大小,不然为什么还需要滚动呢),而QScrollArea在超出当前窗口的大小之后,就展现出滚动效果了。
于是我调用scrollWidget的成员函数:
ui->scrollWidget->setMinimumSize(1000,3000);
这样可以看到,在红线标注的区域,也是就ScrollArea放置的区域已经局部实现了滚动了。(上不了图片。。。)
文笔不行,见谅,这只是我个人见解,如果偏差谢谢指正.