Qt自帶示例FlowLayout流布局存在的問題

2021-10-25 19:56:48 字數 997 閱讀 8759

近期在專案中用到了流布局,找了一圈發現qt的示例中就有乙個flowlayout。但是在實際專案應用中發現,在動態顯示隱藏控制項時,布局內的控制項的spacing受到的影響。

原始碼中dolayout函式:

int flowlayout::dolayout(const qrect &rect, bool testonly) const

if (!testonly)

item->setgeometry(qrect(qpoint(x, y), item->sizehint()));

x = nextx;

lineheight = qmax(lineheight, item->sizehint().height());

}return y + lineheight - rect.y() + bottom;

}

需要判斷一下item->widget()是否有隱藏(存在問題)

if(!wid->isvisible())

通過實際應用,發現上面的方法依然有侷限性,當在動態新增控制項時,在最後乙個控制項正好轉行的時候,它的位置並沒有加入spacey,會導致與上一行第乙個連在一次。最後通過列印發現在布局的控制項不顯示時,所有的子控制項的都是隱藏的的,然後控制項顯示後會多次呼叫dolayout,最後乙個控制項總是隱藏狀態如下圖

另外在使用if(!wid->isvisible())還需要判斷wid是否為空,既這個item是否為qwidget控制項。所以做出如下更改

if(item->sizehint() == qsize(0,0))

判斷item的推薦大小(sizehint)是否為0,這樣就不會出現最後乙個轉行的控制項位置不正確。另外這個sizehint一般為控制項的最小大小,所以用flowlayout時子控制項的最小大小一定要設定。

QT綜合示例 QT串列埠通訊

如果用qt寫程式作為上位機,然後通過和usb和下位機通訊的時候,就需要用到qt中的串列埠通訊了。1 pro 新增 qt serialport 2 主函式 main.cpp 新增 include mywidget.h include intmain int argc,char ar 3 mywidge...

自學Qt之路 串列埠程式設計(使用自帶Qt庫)

之前學習嵌入式驅動,做乙個紅外攝像頭的專案,在作業系統之上直接操作 lcd顯示屏,顯示影象。後來聽說 qt能夠跨平台,跨 window android linux 三個平台,而且做專案必須有個圖形介面,看起來高大上。之後根據這個專案需要,自學 qt5.6 寫個部落格記錄一下自己學習過程。之前看過 q...

自學Qt之路 串列埠程式設計(使用自帶Qt庫)

之前學習嵌入式驅動,做乙個紅外攝像頭的專案,在作業系統之上直接操作 lcd顯示屏,顯示影象。後來聽說 qt能夠跨平台,跨 window android linux 三個平台,而且做專案必須有個圖形介面,看起來高大上。之後根據這個專案需要,自學 qt5.6 寫個部落格記錄一下自己學習過程。之前看過 q...