2015-06-29 16 views
0

我的應用程序的主窗口是一個QGidget,它帶有一個包含QStatusBar的其他幾個小部件的QGridLayout。QStatusBar :: showMessage()調用的大小調整

我跟着Qt文檔http://doc.qt.io/qt-4.8/qstatusbar.html,讓自己的狀態欄能夠顯示:

  • 「正常消息」(即:「準備好了」),通過添加一個QLabel到狀態欄的方式使用QStatusBar::addWidget()
  • 通過調用QStatusBar::showMessage()臨時消息(即暫時隱藏「正常消息」)。

我的問題是,當一個臨時消息顯示或清除狀態欄,然後它顯然觸發QLayout::activate()(在我的主窗口的佈局)。這反過來可能會激起我的窗口中的其他小部件的大小調整,並且我做而不是希望這種情況發生。

好奇(討厭)的事情是,狀態欄實際上沒有調整大小(因爲它應該,它不需要調整大小),所以我不知道爲什麼QStatusBar::showMessage()會要求佈局調整任何東西。

任何人都知道這個解決方案?提前致謝!

+0

上清除關閉消息後,以適應其內容這僅僅是一個在黑暗中拍攝,但狀態欄。() - > setSizePolicy (QSizePolicy :: Ignored,QSizePolicy :: Fixed);可能會阻止狀態欄嘗試過多地混淆您的佈局。 –

+0

我剛剛嘗試過你的建議,不幸的是它仍然是一樣的:( – Seub

+0

)如果'QLayout :: activate()'導致其他事情調整大小,儘管所有的小部件大小應該是相同的,但是有一些可怕的錯誤。在任何佈局上都可以調用'activate()',而不會產生任何影響,只要一切都正確。是否使用了任何自定義小部件?請生成一個最小的自包含單文件測試用例 –

回答

-1

使用

QWidget::adjustSize() 

要調整父控件顯示或狀態欄

+0

父窗口小部件不需要調整,我想阻止它做任何調整大小。 – Seub

+0

通過這樣做,不會導致子窗口小部件被調整大小。你甚至嘗試過嗎? –

+0

好吧,我剛剛嘗試,它不工作,因爲我的預期。當QStatusBar :: showMessage()被調用時,我的佈局會立即調整窗口小部件的大小,所以如果我在showMessage()之後調用QWidget :: adjustSize()來阻止它執行它,那就沒有時間了。此外,由於具體的原因,我不希望主窗口調整其子窗口小部件的大小,除非窗口本身被調整大小。 – Seub

相關問題