在布局和尺寸政策方面,我从来都不是太棒了,所以这可能是一个简单的答案,但是这里有。
当我向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");
答案 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);