2011-02-10 82 views
13

如何在應用佈局規則後預覽窗口中小部件的大小,之前我實際上是show()小部件窗口?看起來在初始show()命令之前,所有尺寸都是100x30。我該如何解決這個問題?如何在show()之前預覽窗口小部件的大小?

+0

你需要什麼這個? – 2011-02-10 22:05:09

+0

我自己的小部件窗口類,檢查對象的大小和添加動態小部件在施工時間。我需要在該階段的佈局之後測量事物的大小。 – JasonGenX 2011-02-10 22:47:34

回答

9

invalidate()爲我工作。

請注意,如果你這樣做了以下它的工作如下要求(至少它似乎是在我的代碼罰款):

widget->show(); 
widget->layout()->invalidate(); 
widget->hide(); 

這並不顯示在屏幕上的小部件,因爲你不直到hide()發生,才放棄對隊列的控制。在這之間,invalidate()計算正確的位置。

4

你可以嘗試使用Google的「展前QT幾何」,這顯示了qtcentre.org論壇題爲Force geometry update of hidden widget一個線程在那裏你可以閱讀Wysota答案:

你可以叫上 無效()佈局。它應該重新計算自己 然後。如果不是,那麼有這個祕密 屬性,說服部件它 正在顯示,然後你應該是 能夠強制其佈局 重新計算。但首先嚐試其他的東西 ,這不是很可靠的東西 。

的Qt :: WA_WState_ExplicitShowHide設置爲 真實和Qt :: WA_WState_Hidden設置爲 假。確保在 實際在屏幕上顯示小部件之前,還原值 (特別是第二個)。

2

使用QWidget :: sizeHint根據所有子窗口小部件和佈局的大小提示獲取所需的頂級窗口小部件大小。或者調用QWidget :: adjustSize來實際運行佈局並調整整個小部件樹的大小。請注意,adjustSize將頂級窗口限制爲屏幕的2/3,因此您可能無法獲得大窗口所需的內容。

6

對於我來說,下面的工作:

window->layout()->update() 
window->layout()->activate() 

這可能真的一樣Alexis的答案,但它並不需要顯示,當時躲在窗口。

1

我想他人所發佈的各種解決方案(show & hideupdate & activateinvalidateWA_WState_ExplicitShowHide & WA_WState_Hidden),但沒有一個與所有的部件,我不得不中心前在我的應用程序中調用show()正確。我花了數小時挖掘,我的問題是不正確的尺寸被緩存在QWidgetItemV2。幾分鐘後,我想出了這個:

for(auto*child:widget->findChildren<QWidget*>()){child->updateGeometry();} 
widget->updateGeometry(); 
相關問題