簡體   English   中英

動態地將自定義窗口小部件添加到嵌入式布局

[英]Dynamically add a custom widget to a baked-in layout

我正在開發一些桌面軟件,該軟件需要一個靜態窗口,其中的框架充滿了動態內容。 該框架位於主窗口上,並且主窗口具有網格布局,該網格布局使我通過編輯器添加的小部件可以自動調整窗口大小或擴展窗口大小。

我創建了一個自定義小部件(並使用框架和可停靠小部件進行了一些更改)以嘗試獲得所需的行為。 當我將此小部件添加到新布局(我嘗試過QVBoxLayout和QGridLayout)並告訴框架使用該布局時,不會顯示任何小部件,但是,如果我創建了小部件的框架變體並將其作為框架的父項在構造函數中(也稱為new CustomWidget(this-> ui-> my_frame);),它會顯示,但顯然不遵循布局(不會擴展)。 我的自定義窗口小部件的其他組合(如QWidget,QFrame或QDockableWidget)將不會顯示在我的框架中,並且如果不在此范圍內,它將不會隨着窗口調整大小事件而擴展。

我在某些地方已經讀到,重寫主窗口的resize事件功能可以解決此問題,但這僅在不使用布局的情況下-我更喜歡使用布局。

如果我使用固定的內容和QTabWidget,則可以得到所需的輸出,但是要為其構建此應用程序的客戶端將更希望我不要使用選項卡。 他們競爭對手的軟件使用制表符,我們都同意它看起來笨拙。

我想我將結束對小部件界面的編碼,但是現在我很好奇為什么將這些小部件導入布局無法按預期進行。

如果我正確理解了您的描述,則您會在主窗口中看到一個空白的QFrame,希望在運行時將其動態添加到其他QWidget。

將新的子QWidget添加到占位符QFrame時,如果希望自動放置它們並調整其大小,則必須將它們添加到占位符QFrame而不是主窗口的QLayout中。

我建議嘗試從一個簡單的小部件(例如QLabel帶有一些文本)的子類開始,並在您的代碼中使用它來查看它是否有效。 可能您需要添加代碼來處理Qt期望小部件執行的操作,並且該代碼已由現有小部件處理。

根據過去的經驗,您所描述的內容(添加到布局,將該布局分配給框架)是可行的,並且是正確的方法。 因此,我想必須有一些代碼可以處理自定義小部件中缺少的布局信號。

例如:

布局是一種優雅而靈活的方式,可以在其容器中自動排列子窗口小部件。 每個小部件都通過sizeHint和sizePolicy屬性向布局報告其大小要求,並且布局會相應地分配可用空間。

來自: 小部件和布局文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM