2016-09-06 59 views
1

我正在實現一個標籤樣式的用戶界面。其中選項卡由QListWidget顯示,內容由QStackedWidget顯示。在QStackWidget的每個頁面上都有允許在QHBoxlayout中插入面板(小部件)的佈局。在每個面板上,都有一些圖標在QHBoxLayout中。以下是我想實施的理想情況。與QStackedWidget QLayout問題

enter image description here

但QStackWidget此的其他頁面上沒有如下

enter image description here

我想刪除多餘的空格(或排列圖標向左消除的情況下(以較少的圖標)在面板上的圖標之間的額外空間)

我試過墊片,然後發生這種情況:(

enter image description here

請幫我改正這件事。我隔碼是

inline QSpacerItem * buildSpacer(Qt::Orientation orientation) 
{ 
     QSpacerItem * pSpacer = nullptr; 
     if (orientation == Qt::Horizontal) 
     { 
      pSpacer = new QSpacerItem(1000, UNIT_VALUE, QSizePolicy::Expanding, QSizePolicy::Minimum); 
     } 
     else 
     { 
      pSpacer = new QSpacerItem(UNIT_VALUE, 1000, QSizePolicy::Minimum, QSizePolicy::Expanding); 
     } 
     return pSpacer; 
} 

注意 我DONOT要使用QTabWidget。順便說一句,這個問題也與QTabWidget

回答

1

爲什麼不使用QTabWidget在第一位?

不管怎麼說,而不是創建自己的QSpacerItem,你應該使用addStretch()

my_layout->addWidget(new Widget("widget1")); 
my_layout->addWidget(new Widget("widget2")); 

my_layout->addStretch(1); // will "eat" extra space 
+0

非常感謝你。有效。如果可能的話,你能解釋我的間隔器方法有什麼錯誤嗎? – Jai

+0

很難說,因爲如[文檔](http://doc.qt.io/qt-5/qspaceritem.html#details)所述,「通常情況下,您不需要直接使用此類」。所以我從來沒有使用它:p但是看Qt的[源代碼](http://code.qt.io/cgit/qt/qtbase.git/tree/src/widgets/kernel/qboxlayout.cpp#n895),它看起來像'insertStretch'(它被'addStretch'調用)使用類似於你的代碼,除了間隔符是用空值(0,0)構造的。拉伸值仍與間隔件一起使用,所以也許它不能單獨使用 – wasthishelpful