QLayout動態布局 清空布局

2021-10-03 23:40:21 字數 607 閱讀 2570

新寫的程式需要動態的改變視窗數量,需要清理原有視窗。在windows下寫好**後放入linux下崩潰。檢視qt文件才發現是寫法不規範的問題。

先直接擺最終寫法:

qlayoutitem *item = mainlayout->takeat(0);

while(item != 0)

item = mainlayout->takeat(0);

}以下是幾次錯誤嘗試(直接從a處寫):

1、最早是從網上找到的資料,先隱藏視窗,再刪除。

繞過布局直接刪除widget,windows下不會出錯,但linux會崩潰

2、檢視qt文件後,使用removewidget

利用removewidget移除視窗後刪除不會報錯,但列印後發現item位址還是不變的,說明item還是在的。雖然不清楚qt內部機制,但還是處理乾淨好一些。

tips:qt文件中removeitem和removewidget都有一段話:

it is the caller's responsibility to delete the item.

可見removeitem和removewidget僅僅將widget/item移除出布局。如果被移除的視窗不需要使用,應當刪除。

Qt基本布局 QLayout

qt提供了qhboxlayout類 水平排列布局 qvboxlayout類 垂直排列布局 qgridlayout類 網格排列布局 等基本布局管理。它們之間的繼承關係如下圖 布局中常用的方法有addwidget 和addlayout addwidget 方法用於加入需要布局的控制項 void addw...

Qt學習 布局管理器QLayout類

常用的布局管理有qvboxlayout,qhboxlayout,qgridlayout。下面是綜合應用 新建qt gui程式,基類為dialog 標頭檔案 view plain copy to clipboard print?ifndef dialog h define dialog h inclu...

流式布局清空歷史搜尋

依賴 1.新增依賴 在專案的 build.gradle 檔案中新增 allprojects 在 module 的 build.gradle 檔案中新增依賴 dependenciespublic class mainactivity extends implements view.onclicklis...