Qt的QScrollArea如何只用一个方向

SineStriker 2021-03-10 01:15:44
不知道大家有没有遇到过这种需求,但是我搜索了很多地方,也试了很多次也没很好地解决。

假如说我用一个QScrollArea(包含一个被控制的Widget),保持ScrollArea显示区域与Widget的宽永远相同,Widget的高根据自己需要变化,然后当Widget的高超过ScrollArea时,竖直滚动条出现。

类似于一个纵向堆积的List。

用Layout的话,那么长宽都会变,直接用QScrollArea,那么两个滚动条都会出现,ScrollArea也不会管Widget宽高怎么变。
不知道有没有大神能解决这个问题。
...全文
997 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 5 楼 至精至简 的回复:
[quote=引用 3 楼 这是一个正经昵称 的回复:]首先设置水平滚动条隐藏。 注册事件过滤器,仅Widget宽变化的时候调整ScrollArea的宽。 Widget中给一个QList<YourBaseClass*>, 自己封几个接口 append, insert, remove等。 当List数量变化的时候调用自己写的函数 adjustMyWidgetSize, 计算total height,重新调整Widget的高。 此时高度大于QScrollArea的话垂直滚动条自然出现了。
你没看懂我的意思,就是ScrollArea是个容器,假设就是MainWindow的CentralWidget,当我去拉伸窗口,那么ScrollArea大小就会改变对吧。。然后怎么样让里面的Widget宽度一直与ScrollArea保持一致(拉伸),当缩小窗口时,Widget横向就被伸缩,纵向就看有没有显示不下而出现ScrollBar。[/quote] 是你没看懂我的意思吧,控件我恰好做过了,我也没去用Qt的LayOut,自己用代码和事件过滤器就可以实现了,不就是一个resize了另一个也要resize,宽度一样还显示水平ScrollBar直接隐藏了就行,水平ScrollBar的显示实际上应该是Widget的宽+垂直SCrollBar的宽是否大于ScrollArea的宽来判断的。 再加一些属性动画可以和QML里的那个List效果一样。
  • 打赏
  • 举报
回复
首先设置水平滚动条隐藏。 注册事件过滤器,仅Widget宽变化的时候调整ScrollArea的宽。 Widget中给一个QList<YourBaseClass*>, 自己封几个接口 append, insert, remove等。 当List数量变化的时候调用自己写的函数 adjustMyWidgetSize, 计算total height,重新调整Widget的高。 此时高度大于QScrollArea的话垂直滚动条自然出现了。
  • 打赏
  • 举报
回复
这不是很简单吗?
SineStriker 2021-03-10
  • 打赏
  • 举报
回复
引用 6 楼 芒果黑 的回复:
引用 4 楼 至精至简 的回复:
[quote=引用 1 楼 芒果黑 的回复:]setHorizontalScrollBarPolicy可以设置水平滚动条隐藏
那怎么让横向拉伸呢
你自己说的横向不用管的 只要scrollarea大小改变就会触发resizeEvent 在resizeEvent里设置里面的widget和scrollarea一样宽就行了 高度也一样 在resizeEvent里调整[/quote]解决了,只需要在resizeEvent里再调用一次父类的就行。
SineStriker 2021-03-10
  • 打赏
  • 举报
回复
引用 6 楼 芒果黑 的回复:
引用 4 楼 至精至简 的回复:
[quote=引用 1 楼 芒果黑 的回复:]setHorizontalScrollBarPolicy可以设置水平滚动条隐藏
那怎么让横向拉伸呢
你自己说的横向不用管的 只要scrollarea大小改变就会触发resizeEvent 在resizeEvent里设置里面的widget和scrollarea一样宽就行了 高度也一样 在resizeEvent里调整[/quote]在resizeEvent里设置宽度一样以后,会出问题,当本来没有bar但是高度不够的时候bar不会自动出来,除非去改变一下宽度。
芒果黑 2021-03-10
  • 打赏
  • 举报
回复
setHorizontalScrollBarPolicy可以设置水平滚动条隐藏
芒果黑 2021-03-10
  • 打赏
  • 举报
回复
引用 4 楼 至精至简 的回复:
引用 1 楼 芒果黑 的回复:
setHorizontalScrollBarPolicy可以设置水平滚动条隐藏
那怎么让横向拉伸呢
你自己说的横向不用管的 只要scrollarea大小改变就会触发resizeEvent 在resizeEvent里设置里面的widget和scrollarea一样宽就行了 高度也一样 在resizeEvent里调整
SineStriker 2021-03-10
  • 打赏
  • 举报
回复
引用 3 楼 这是一个正经昵称 的回复:
首先设置水平滚动条隐藏。 注册事件过滤器,仅Widget宽变化的时候调整ScrollArea的宽。 Widget中给一个QList<YourBaseClass*>, 自己封几个接口 append, insert, remove等。 当List数量变化的时候调用自己写的函数 adjustMyWidgetSize, 计算total height,重新调整Widget的高。 此时高度大于QScrollArea的话垂直滚动条自然出现了。
你没看懂我的意思,就是ScrollArea是个容器,假设就是MainWindow的CentralWidget,当我去拉伸窗口,那么ScrollArea大小就会改变对吧。。然后怎么样让里面的Widget宽度一直与ScrollArea保持一致(拉伸),当缩小窗口时,Widget横向就被伸缩,纵向就看有没有显示不下而出现ScrollBar。
SineStriker 2021-03-10
  • 打赏
  • 举报
回复
引用 1 楼 芒果黑 的回复:
setHorizontalScrollBarPolicy可以设置水平滚动条隐藏
那怎么让横向拉伸呢

16,212

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧