QScrollArea 动态添加控件问题

1、目标
QScrollArea设置最大值和最小值,动态添加控件,超出最大值则滚动,小于最大值则QScrollArea大小自动缩小。

2、遇到问题
通过重写QScrollArea类,contentWidget调用adjustSize改变widget大小,再设置QScrollArea->setFixedSize,实际效果是debug可以正常显示,release版本widget显示不正常。

3、查找问题
通过打印控件边框发现,QScrollArea是正常的,widget大小正常,但是并没有绘制全。调试源码发现widget的父类是QScrollArea创建的 viewport(viewport也是widget),发现viewport加上滚动条后和QScrollArea大小一致,改变widget和QScrollArea大小,viewport并没有改变。同时发现widget大于viewport大小则会滚动

4、解决
改变QScrollArea时必须把viewport大小也修改,但要注意一点,setFixedSize会把最大值和最小值都修改,所以修改之前必须把最大值和最小值存储下来,下次计算时要还原

5、耗时5天,希望能帮助到你

你可能感兴趣的:(qt,qt,qscrollarea,viewport)