2013-02-04 32 views
0

我的程序執行計算並輸出一些原理圖,繪製到標籤上(使用QPixmap)。我在每個標籤上都顯示一個標籤。如何調整QTabWidget的大小?

當下一次計算完成並且圖形較小時,我希望製表符的大小也減小。但是這並沒有發生。標籤大小保持不變。

我首先刪除所有以前的選項卡removeTab(),然後創建新的選項卡。當然,唯一沒有刪除的是QTabWidget

從小圖紙開始時,標籤尺寸隨着較大的圖紙而增加。但相反,這並不奏效。

我該如何解決這個問題?以下代碼不起作用:

layout_tabs = new QTabWidget; 
layout_tabs->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); 

我正在使用QT-4.8.4。

回答

0

您可以(用戶)在切換到較小的標籤後,使用鼠標手動調整窗口大小以縮小窗口大小嗎?

如果是這樣,則可能發生的情況是父窗口小部件(即窗口)已調整大小以容納較大的子QTabWidget。當較小的標籤出現在大標籤之後時,QTabWidget仍然會佔用其父級給出的足夠空間,除非其佈局圖層中的另一個小部件處於優先級別。由於父窗口沒有變小,QTabWidget也不會。

因此,在刪除標籤和選項卡小部件後應嘗試調整父部件(QMainWindow或其他)的大小。在Qt中,縮小通常必須來自上方,而擴展可能來自上方或下方。這樣的事情可能工作(未經測試)...

while(layout_tabs->count() > 0) 
{ 
    QWidget* removedtab = layout_tabs->widget(0); 
    layout_tabs->removeTab(0); //removeTab() doesn't delete the widget 
    removedtab->deleteLater(); //so you have to delete it yourself 
} 
layout_tabs->updateGeometry(); 
mainwindow->resize(mainwindow->minimumSize()); 

編輯注意QLayoutTab::removeTab()不會刪除您刪除的標籤,所以你需要自己莫名其妙地刪除,如代碼片段我剛剛添加,因爲刪除的選項卡不再有父項。

+0

感謝您的回答!是的,我可以使用鼠標調整窗口大小:-)爲什麼我沒有想到這一點。好吧,我會嘗試updategeometry()並會讓你知道它是否成功。 –

+0

一個問題是我把qtabwidget放到qdockwidget中。我只是做layout_tabs =新的QTabWidget;一切運作良好。除了當我的主窗口關閉時標籤不關閉。 –

+0

確保您'new'的每個窗口小部件都具有'QObject'父窗口,方法是將其傳遞給其構造函數,或者將該窗口小部件通過佈局放入另一個窗口小部件中。包括QWidgets及其後代在內的QObjects會刪除其解構器中的任何子項。另請參閱我的關於[QTabWidget :: removeTab()]的新評論(http://qt-project.org/doc/qt-4.8/qtabwidget.html#removeTab)。 – Phlucious

相關問題