[問題][QT] 如何阻止QLabel重疊?

看板C_and_CPP (C/C++)作者 (薯)時間3年前 (2021/03/26 15:43), 3年前編輯推噓1(104)
留言5則, 1人參與, 3年前最新討論串1/1
網路上查都是詢問如何讓元件重疊... 我的程式是要做動態載入圖片 就像網路的線上看漫畫那樣,還沒看到的圖片先別載入 等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://www.ptt.cc/bbs/C_and_CPP/M.1616744598.A.C18.html

03/26 21:48, 3年前 , 1F
圖片很少的話也會發生重疊嗎?例如只有兩張的話呢?
03/26 21:48, 1F
我剛剛測試了一下,如果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

03/26 22:51, 3年前 , 2F
感覺是 labels 總高度超過上層容器的高度上限造成的。
03/26 22:51, 2F

03/26 22:58, 3年前 , 3F
可以從這個線索找起,例如檢查 scrollArea->widget()
03/26 22:58, 3F

03/26 22:58, 3年前 , 4F
的 size 相關設定有沒有問題之類的。
03/26 22:58, 4F

03/26 23:09, 3年前 , 5F
另外 gridLayout 的預設最大高度是 524287,也可參考。
03/26 23:09, 5F
是的!! 我剛剛有發現到。 我剛剛測試不同尺寸的視窗下的同寬縮放 QScrollArea 的Layout (GridLayout) 的Size高度都是一樣 QSize(1767, 524305) QSize(1763, 524305) QSize(2315, 524305) 我看一下能不能解除@@ ※ 編輯: liu2007 (123.192.225.144 臺灣), 03/26/2021 23:28:10
文章代碼(AID): #1WNP2MmO (C_and_CPP)
文章代碼(AID): #1WNP2MmO (C_and_CPP)