情況:我的應用程序的中央物件我有一個QMdiArea在分頁模式(包裹在從繼承QMdiArea自定義類) 。當我現在添加第一個QMdiSubWindow通過addSubWindow()
一切都仍然很好,這意味着窗口及其內容被最大化佔據了QMdiArea的所有空間。但是,只要添加第二個子窗口,就會出現以下問題:QMdiArea:一是標籤工作正常,第二個選項卡的內容來說太小了
問題:不顯示第二個窗口的內容,而是從第一個窗口的內容繼續(儘管事實上第二個標籤視覺上具有焦點),但尺寸減小。它只佔用幾個像素。但是,如果我現在切換回第一個子窗口/選項卡(通過點擊縮小尺寸的窗口小部件,然後自動返回到最大尺寸或選擇第一個標籤頁眉),然後再次選擇第二個窗口,第二個選項卡的小部件/編輯器現在顯示並被最大化。
但是,直到我關閉第二個標籤,在這種情況下,第一個內容纔會顯示(如預期的那樣),但同樣只有小尺寸!
截圖:
另一個相關的測試用例:1標籤,創建並顯示全尺寸的預期。如果我現在只是調整總體大小,我的選項卡上的小部件周圍突然出現一個模糊的邊框。所以它似乎處於最大化和正常模式之間的邊界混合狀態。這是否創造了任何新的線索?
截圖:
,但考慮到第一個標籤工作正常,手動回往復切換所有其他人也後,我認爲它應該沒有工作。
我是否需要設置顯式佈局對象?爲什麼它適用於第一個標籤,但不是第二個標籤?
一些代碼爲基礎:這是我的自定義QMdiArea類,它增加新的兒童照顧執行的邏輯:
// Note: pEditor inherits from/is a QMdiSubWindow itself
if(!pEditor->isInitialized())
{
pEditor->initialize();
pEditor->setWidget(pEditor->getEditorWidget());
pEditor->setInitialized(true);
}
pEditor->beforeDisplay();
addSubWindow(pEditor);
pEditor->showMaximized();
// HACK START
pExisting = subWindowList().at(0);
if(pExisting)
setActiveSubWindow(pExisting);
// HACK END
更新:增加黑客proposed by N1ghtLight。在編碼中標記爲這樣。
更新2:編輯/正確的問題描述+帶有屏幕截圖的新測試用例。
是否嘗試過爲QMdiSubWindow創建的新的pEditor實例調用void QMdiArea :: setActiveSubWindow(QMdiSubWindow * window)?例如,在addSubWindow(pEditor)之後調用它。此外,我想知道是否需要調用showMaximized。 – 2014-09-25 19:08:25
@ N1ghtLight:這不會改變任何東西。新標籤已經激活(請參閱我新添加的截圖)。關於'showMaximized()':如果我忽略它,那麼子窗口內的小部件根本就不會顯示,因爲它永遠不會被設置爲* visible *。 – 2014-09-25 19:15:47
現在,醜陋的解決方法確實可以調用setActiveSubWindow兩次 - 對於一些可用的子mdi,然後是新創建的子。這應該模擬當你先點擊然後返回秒時的情況。此外,我有一種感覺,以前的時候,當我用mdi(3年前)我有同樣的問題,只是停在這樣醜陋的解決方法:) – 2014-09-25 19:39:38