新寫的程式需要動態的改變視窗數量,需要清理原有視窗。在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...