2012-08-11 61 views
4

在佈局和尺寸政策方面,我從來沒有太好過,所以這可能是一個簡單的答案,但是這裏有。如何讓QWidget擴展到QTabWidget中的整個選項卡?

當我將一個新選項卡添加到QTabWIdget並將該小部件設置爲QSplitter時,分離器將使用給定的全部空間量。但是,當我將一個QSplitter放在QWidget中,並使用QWidget添加一個選項卡時,它不會使用給定空間 - 僅限於分隔符大小。

我想遠離QLayout,因爲我在分割器中有所有必需的小部件。只需讓我的QWidget使用選項卡中的所有空間(這將允許QSplitter使用QWIdget中的所有空間)就是我所需要的。

我在下面構建了一個示例,顯示比較以及結果。很長的問題 - 我怎麼能得到場景一(在「選項卡一」中)出現像場景二(「選項卡二」),仍然使用Spliiter的父QWidget?

ui->setupUi(this); 
QTabWidget* pTab = new QTabWidget(this); 
this->setCentralWidget(pTab); 

//Splitter belongs to a QWidget, which belongs to the Tab. Does not use all space 
QWidget* pWidget = new QWidget(this); 
QSplitter* pSplitter = new QSplitter(pWidget); 

QListWidget* pList = new QListWidget(this); 
QListWidget* pList2 = new QListWidget(this); 
pSplitter->addWidget(pList); 
pSplitter->addWidget(pList2); 
pTab->addTab(pWidget, "Tab One"); 

//Splitter belongs to the Tab. Uses all space 
QListWidget* pList3 = new QListWidget(this); 
QListWidget* pList4 = new QListWidget(this); 

QSplitter* pSplitter2 = new QSplitter(this); 
pSplitter2->addWidget(pList3); 
pSplitter2->addWidget(pList4); 
pTab->addTab(pSplitter2, "Tab Two"); 

End result

回答

5

更改此:

QWidget* pWidget = new QWidget(this); 
QSplitter* pSplitter = new QSplitter(pWidget); 

要這樣:

QWidget* pWidget = new QWidget(this); 
QVBoxLayout* layout = new QVBoxLayout(pWidget); 
QSplitter* pSplitter = new QSplitter(pWidget); 
layout->addWidget(pSplitter); 
+0

你是一個生命的救星!謝謝! – giraffee 2012-08-11 16:17:13

相關問題