2011-04-22 73 views
0

我有一個QStatusBar。我添加了一個標籤,在那裏顯示一個圖標。現在我想模仿QStatusBar :: showMessage()的行爲,方法是將另一個標籤中的文本設置爲狀態欄的小部件。我需要這個,因爲我不能在狀態欄中設置標準消息的填充。否則,圖標和文字會重疊。現在我希望包含消息文本的QLabel擴展到狀態欄的全部寬度。我怎樣才能做到這一點?如何自動擴展QStatusBar中的標籤寬度

謝謝。

回答

1

這是你可以嘗試的東西,我從來沒有嘗試過狀態欄,所以我不知道它是否有效,但我嘗試了其他容器,並且效果很好。創建一個HBoxLayout,使用它的佈局狀態欄,添加圖標和標籤,並將layoutStretch設置爲0,1(addStretch(0); addStretch(1)),0表示圖標意味着它將伸展以適應圖標和1,它將伸展到所有剩餘空間,使標籤展開爲全寬。

該代碼將是這個樣子:

如果
QHBoxLayout *layout = new QHBoxLayout(statusBar); 
layout->setContentsMargins(11, 11, 11, 11); 
statusBar->setLayout(layout); 
layout->addStretch(0); 
layout->addWidget(iconlabel); 
layout->addStretch(1); 
layout->addWidget(textlabel); 

很抱歉,我們編譯錯誤,現在不能嘗試。希望有所幫助。

編輯: 儘管上面的代碼是不是在工作,我不會刪除它,becouse它是其它容器的正確方法。狀態欄這應該工作:

statusBar->addWidget(iconLabel, 0); 
statusBar->addWidget(textLabel, 1); 
+0

出現的消息時,我嘗試設置佈局:QLayout:嘗試添加QLayout「」到QStatusBar「」,它已經具備了佈局 的QWidget :: setLayout的:嘗試在QStatusBar「」上的QLayout「」,已經有佈局 – vian 2011-04-23 21:06:04

+0

有一件事我注意到,在構造函數上設置父對象已經設置了佈局,並且你不需要顯式地調用setLayout。 – vian 2011-04-23 21:14:27

+0

結果是 - 當我首先設置文本 - 它適合。但是當我之後設置更長的文本時,它看起來被切斷了。 – vian 2011-04-23 21:37:25

相關問題