如何允许QWidget扩展到QTabWidget中的整个选项卡?

时间:2012-08-11 02:11:43

标签: qt user-interface tabs resize qsplitter

在布局和尺寸政策方面,我从来都不是太棒了,所以这可能是一个简单的答案,但是这里有。

当我向QTabWIdget添加新选项卡并将窗口小部件设置为QSplitter时,拆分器将使用给定的整个空间量。但是,当我在QWidget中放置QSplitter并使用QWidget添加选项卡时,它不会使用给定空间 - 只有分割器大小。

我想远离QLayout,因为我在分割器中拥有所有必需的小部件。只需让我的QWidget使用选项卡中的所有空间(这应该允许QSplitter使用QWIdget中的所有空间)就是我所需要的。

我在下面构建了一个示例,显示了比较结果以及结果。长问题简短 - 如何让方案一(在“选项卡一”中)看起来像方案二(“选项卡二”)并仍然使用父级QWidget用于Spliiter?

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

1 个答案:

答案 0 :(得分: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);