2013-08-02 61 views
0

我的工作需要與充滿動態內容的框架一個靜態窗口中的一些桌面軟件。該框架位於主窗口上,主窗口具有網格佈局,可讓我通過編輯器添加的窗口小部件通過窗口大小自動調整大小/展開窗口。動態自定義窗口小部件添加到烤入佈局

我創建了一個自定義的widget(並提出了框架和可停靠小部件的一些變化),試圖獲得所需的行爲。當我這個小部件添加到一個新的佈局(我都試過QVBoxLayout和QGridLayout),告訴框架使用該佈局,無插件被顯示出來,但是,如果我創建窗口小部件和家長將其與幀的幀變種在構造(又名新CustomWidget(這 - > UI-> my_frame);),它顯示,但顯然不是以下的佈局(不膨脹)。我的自定義窗口小部件的其他組合(如一個QWidget,QFrame,或QDockableWidget)將在我的框架顯示,如果在關閉的機會,它呢,它不與窗口中展開調整事件。

我讀過一些地方重寫主窗口的調整大小事件功能可能會解決這個問題,但只有在我不使用佈局的情況下 - 我更喜歡使用佈局。

如果我使用固定內容和QTabWidget,但是我正在構建此應用程序的客戶端會非常喜歡我不使用選項卡,我可以獲得所需的輸出。他們的競爭對手的軟件使用標籤,我們都同意它看起來笨重。

我打算最終編寫小部件界面代碼,我想,但現在我很好奇爲什麼將這些小部件導入到佈局中並不像預期的那樣工作。

回答

0

如果我正確理解了你的描述,你將看到一個帶有空白QFrame的主窗口,你希望用它來在運行時動態添加其他QWidgets。

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

+0

是的,這就是我在做什麼。我會創建一個新的佈局,將小部件添加到該佈局,然後將其設置爲框架的佈局。這對我不起作用。 – OzBarry

+0

您可以提供的代碼中動態創建子控件,並將它們添加到容器的佈局? – RobbieE

0

我會建議嘗試從一個簡單的小部件的子類(例如一些文本的QLabel)開始,並在代碼中使用它來查看它是否有效。這可能是因爲你需要添加代碼來處理Qt所期望的Wid所要做的事情,而這些事情已經被現有的Widget處理過了。

從過去的經驗來看,您所描述的(添加到佈局中,將該佈局分配給框架)是有效的,並且是正確的做法。所以我想象一定有一些代碼可以處理你的自定義小部件中缺少的佈局信號。

例如:

佈局是一個優雅和靈活的方式,他們的容器內自動排列子部件。每個小部件通過sizeHint和sizePolicy屬性將其大小要求報告給佈局,並且該佈局相應地分配可用空間。

來源:Widgets and Layouts doc

相關問題