2016-02-28 46 views
1

我有一個QStackedWidget和QScrollArea小部件組成的定製QDialog,用於堆疊小部件的每個頁面。在顯示之前獲取QScrollArea視口的大小

我想設置QDialog的大小提示,使對話框足夠大,當對話框第一次顯示時滾動區的滾動條不可見(即確保QScrollArea viewport的大小= size提示爲滾動區域中的子部件)。目前,QDialog的默認sizeHint()實現的高度不足,這會導致在第一次加載時顯示垂直滾動條。

我認爲這可以通過重新實現QDialog的sizeHint()來實現,其中對話框的大小提示將通過調整QScrollArea視口的大小以等於子窗口小部件的大小滾動區域(用於堆疊佈局的第一頁)。不幸的是,在sizeHint()中,QScrollArea視口的大小被設置爲QStackedWidget(640x480)的默認大小,並且只有在顯示QDialog後纔會更新爲正確的大小。

是否有某種方式可以在顯示QScrollArea視口之前獲取正確的QScrollArea視口大小,或者通過另一種方式實現調整對話框的大小提示以防止第一次顯示時顯示滾動條的所需效果(除了硬編碼對話框的大小)。

回答

0

與您對話的組成爲:

我有一個自定義QDialog的由具有QScrollArea 小部件堆疊的窗口小部件的每一頁QStackedWidget的。

棘手的部分是要回答:

有一些辦法讓QScrollArea視 的正確尺寸顯示之前呢?

那麼,在切換到某個頁面之前,您可以估算滾動區域視口,如果它被正確設置,或者您可以測量滾動區域內的內容。我通常迫使小部件從滾動區域一樣,需要一定的高度:

wdgetInScrollArea->setMinimumSize(widgetInScrollArea->sizeHint()); 
wdgetInScrollArea->adjustSize(); // sometimes it is needed 

的滾動區域視提示是那麼更多的「足夠」:

qDebug() << scrollArea->viewPortSizeHint(); // report 

我沒有看到代碼但通常甚至不需要在此處執行任何自定義事件處理,只需準備所有嵌套的小部件即可。

+0

謝謝AlexcanderVX。我最終重新實現了我的QDialog類中的showEvent,以獲得滾動區視口的正確大小。然後,我將scrollAreaViewport的大小和widgetInScrollArea最小大小提示之間的差異,在對話框顯示之前調整對話框的大小(以便在滾動區域中爲窗口小部件提供viewport = min size提示的大小)。 –

+0

@karl_simmons,當然這個建議是由你應用的,需要更多的工作。但是,如果答案是有用的,你可能會upvote和接受它,其餘的人認爲它是有幫助的。我也會嘗試從你的解決方案中添加到答案。 – AlexanderVX

相關問題