[問題][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