我有一个QMainWindow,水平布局作为中央小部件。水平布局包含三个小部件。 这是代码:
this.navigationTree=new NavigationTree();
Browser browser = new Browser();
this.clusteringPlot=new ClusteringPlot();
QWidget centralWidget=new QWidget();
QHBoxLayout layout=new QHBoxLayout();
layout.addWidget(navigationTree);
layout.addWidget(clusteringPlot);
layout.addWidget(browser);
centralWidget.setLayout(layout);
this.setCentralWidget(centralWidget);`
其中Browser是QWebView。
每当我调整主窗口大小时,在clusteringPlot(扩展QWidget)和navigationTree(扩展QTreeWidget)时,浏览器不会调整大小。
如何更改代码以便浏览器调整大小?我看了类似的问题,但我找不到解决问题的方法。
提前多多感谢 洛舍
答案 0 :(得分:0)
布局在决定如何分配空间时查询其子项的最小大小。因此,您的首要任务是确保占用QHBoxLayout
的所有小部件都知道它们的最小有用大小是什么:
NavigationTree
继承QTreeWidget
,我假设它已经提供了合理的最小尺寸(通过继承自minimumSizeHint()
的{{1}}))。如果需要更改,请重新实现QAbstractScrollArea
,如下所示。QWidget::minimumSizeHint()
直接从ClusteringPlot
继承,则可能无法为布局提供合理的最小尺寸,因此您需要提供一个。您可以 重新实现QWidget::minimumSizeHint()
作为QWidget
中的虚拟函数(如果您能够根据对象的状态计算大小,则非常有用)或致电ClusteringPlot
。clusteringPlot->setMinimumSize(...);
的最小尺寸,请致电QWebView
。如果已分配足够的空间来满足其每个子窗口小部件的browser->setMinimumSize(1024, 768);
,则minimumSizeHint()
会根据每个窗口小部件的stretchFactor
开始分配剩余空间。设置拉伸因子的最简单方法是将小部件添加到布局中。尝试将代码更改为:
QBoxLayout
这告诉布局应该以1:1:2的比例分配任何备用空间,即如果有40个额外像素可用,10转到layout.addWidget(navigationTree, 1);
layout.addWidget(clusteringPlot, 1);
layout.addWidget(browser, 2);
,10到navigationTree
和20到clusteringPlot
。