QScrollArea使用笔记(一)

来源:互联网 发布:springboot改端口 编辑:程序博客网 时间:2024/05/17 07:18

做一个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放置的区域已经局部实现了滚动了。(上不了图片。。。)


文笔不行,见谅,这只是我个人见解,如果偏差谢谢指正.


0 0
原创粉丝点击