作者liu2007 (薯)
看板C_and_CPP
标题[问题][QT] 如何阻止QLabel重叠?
时间Fri Mar 26 15:43:11 2021
网路上查都是询问如何让元件重叠...
我的程式是要做动态载入图片
就像网路的线上看漫画那样,还没看到的图片先别载入
等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
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.192.225.144 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1616744598.A.C18.html
1F:推 pinefruit: 图片很少的话也会发生重叠吗?例如只有两张的话呢? 03/26 21:48
我刚刚测试了一下,如果QScrollArea里塞的QLabel低於大约222个的情况下进行同宽缩放
则每一张图都有当初设定的缝隙(spacing(5))
超过大约222个QLabel的情况下进行同宽缩放
就会产生我说的重叠情况
除此之外
如果在QLabel超过222个的同宽缩放情况下
横的图片 (水平较宽的图片)与横的图片之间并不会出现重叠
但是直的(垂直较高的图片)与直的图片、或是直的与横的图片之间会产生重叠。
以上是目前新的发现
※ 编辑: liu2007 (123.192.225.144 台湾), 03/26/2021 22:47:47
※ 编辑: liu2007 (123.192.225.144 台湾), 03/26/2021 22:48:39
2F:→ pinefruit: 感觉是 labels 总高度超过上层容器的高度上限造成的。 03/26 22:51
3F:→ pinefruit: 可以从这个线索找起,例如检查 scrollArea->widget() 03/26 22:58
4F:→ pinefruit: 的 size 相关设定有没有问题之类的。 03/26 22:58
5F:→ pinefruit: 另外 gridLayout 的预设最大高度是 524287,也可参考。 03/26 23:09
是的!! 我刚刚有发现到。
我刚刚测试不同尺寸的视窗下的同宽缩放
QScrollArea 的Layout (GridLayout) 的Size高度都是一样
QSize(1767, 524305)
QSize(1763, 524305)
QSize(2315, 524305)
我看一下能不能解除@@
※ 编辑: liu2007 (123.192.225.144 台湾), 03/26/2021 23:28:10