Qt 小白使用QScrollArea无法滑动的解决办法

时间:2024-03-15 19:41:57

    因工作原因从来没有用过Qt的我最近也接触了一下Qt,在使用QScrollArea的时候发现UI添加进QScrollArea无法滑动,在网上找了很多教程也没发现一个编程新手,能给新手讲明白的教程。无奈之下只好自己琢磨,下面给大家分享下我使用QScrollArea的过程及其Demo。

    两种方法:

        1.直接从设计中生成的QScrollArea(为什么从这个方法开始讲是因为对新手来说容易理解一点。理解了这个直接用代码写应该也能理解的。)

           ①首先从设计中生成一个QScrollArea。

           Qt 小白使用QScrollArea无法滑动的解决办法

            ②添加UI(之前我一直单纯的以为UI直接加入QScrollArea里面就行了,如果UI设置的坐标超过QScrollArea的大小QScrollArea就直接能滚动,结果发现不行,最后研究了一下午才弄懂为什么)

            Qt 小白使用QScrollArea无法滑动的解决办法

            一直纳闷为什么不能滚动,网上各种找资料,感觉网上大部分资料不是针对小白写的,最后发现在设计中生成QScrollArea的时候自动送了一个Widget作为ScrollArea的子widget。而想要滚动画面,就一定要这个widget比QScrollArea的size大的时候才可以,而且滚动的画面也是这个widget。(QScrollArea就像是一扇窗户,widget就像一块画布,画布比窗户大的时候,通过窗户只能看到画布的一部分,画布不断地滚动你就能看到画布的其他内容)所以,一定要把UI放进这个widget,并且最后要设置Widget的大小。

              ③最后要设置QScrollArea的一个属性widgetResizable,这个属性用代码生成的时候默认是false,而用设计生成默认是true,找到它把它设置成false。

               Qt 小白使用QScrollArea无法滑动的解决办法

              这里在设计中创建是默认勾选的,去掉√,最后运行就ok了。

        2.用代码实现QScrollArea(大家看懂了上面的内容的话,下面的就大同小异了,直接给大家贴代码)

Qt 小白使用QScrollArea无法滑动的解决办法

结合代码加注释,相信大家能看懂的。然后在这里给大家解释下widget设置size的问题。

如果你widget设置的widget和QScrollArea一样大会出现这种情况

        Qt 小白使用QScrollArea无法滑动的解决办法

当你右边的ScrollBar出现的时候占用了一些宽度,导致QScrollArea的widget相对的来说变小了(不是变小了,只是这样解释给大家听)。这样的情况下,widget的宽度就是大于QScrollArea的宽度的,这样下面的ScrollBar也会出现。所以一般widget会设置比QScrollArea的宽度小一点点,具体小多少我没去研究,大家自己看看吧。

        然后给大家贴一张正常运行的截图。

           Qt 小白使用QScrollArea无法滑动的解决办法

(此教程针对小白,所以会相对比较繁杂,大神轻踩。然后这是我自己对QScrollArea的理解,不一定完全正确,仅供参考!)