[问题][QT] 如何阻止QLabel重叠?

楼主: liu2007 (è–¯)   2021-03-26 15:43:11
网络上查都是询问如何让元件重叠...
我的程式是要做动态加载图片
就像网络的线上看漫画那样,还没看到的图片先别加载
等scrollBar滑到了再来加载
程式初期会去读取这个漫画有n页
便会生成n个QLabel插入QScrollArea 里的 QGridLayout (使用VBoxLayout仍是会重叠)
然后我有一个按钮
按下去之后会根据当下视窗的宽度
对每个QLabel setFixSize(newSize);
以及里头的pixmap进行 QPixmap newPix = pixmap->scaled(
newSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
把每个QLabel以及里面的pixmap拉成与视窗同宽
这时候我发现我后面读取加载的图,会重叠较早读取的图
原本我以为是我的newSize计算错误
但花了一段时间debug发现我的newSize是正确的
然后也测试sizePolicy,无论是否设定为Fixed,QLabel都会重叠
最神奇的地方是: 当我把视窗的宽缩小到一定的程度
这些QLabel竟然就不会重叠,达成了我一开始想要的效果了!!!
但只要视窗的宽超过一定的程度,QLabel里的图就会重叠
而且视窗的宽越大,重叠的部分也就越大。
想请问我到底哪边出的问题....
以下是部分原始码
https://pastebin.com/zLZ0kSaf
作者: pinefruit (莫使惹尘埃)   2021-03-26 21:48:00
图片很少的话也会发生重叠吗?例如只有两张的话呢?感觉是 labels 总高度超过上层容器的高度上限造成的。可以从这个线索找起,例如检查 scrollArea->widget()的 size 相关设定有没有问题之类的。另外 gridLayout 的默认最大高度是 524287,也可参考。

Links booklink

Contact Us: admin [ a t ] ucptt.com