0

我有一个水平布局的 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);`

其中浏览器是一个 QWebView。

每当我调整主窗口的大小时,浏览器不会调整大小,而 clusteringPlot(extends QWidget) 和 navigationTree(extends QTreeWidget) 会调整大小。

如何更改我的代码以便浏览器也调整大小?我看了类似的问题,但找不到解决问题的方法。

非常感谢罗塞拉

4

1 回答 1

0

布局在决定如何分配空间时会查询其子级的最小尺寸。因此,您的首要任务是确保占据您的所有小部件QHBoxLayout都知道它们的最小有用尺寸是多少:

  • 由于NavigationTree继承QTreeWidget,我假设它已经提供了一个合理的最小尺寸(通过minimumSizeHint()继承自QAbstractScrollArea))。如果这需要更改,请QWidget::minimumSizeHint()按如下方式重新实现。
  • 如果ClusteringPlot直接继承自QWidget,则可能没有为布局提供合理的最小尺寸,因此您需要提供一个。您可以重新实现QWidget::minimumSizeHint()为虚拟函数ClusteringPlot(如果您能够根据对象的状态计算大小,则特别有用)调用 clusteringPlot->setMinimumSize(...);.
  • 由于您要为您的 指定最小尺寸,请QWebView致电browser->setMinimumSize(1024, 768);.

一旦分配了足够的空间来满足其每个子部件的minimumSizeHint()s,aQBoxLayout就开始根据stretchFactor每个部件的 s 分配剩余空间。设置拉伸因子的最简单方法是将小部件添加到布局中。尝试将您的代码更改为:

layout.addWidget(navigationTree, 1);
layout.addWidget(clusteringPlot, 1);
layout.addWidget(browser, 2);

这告诉布局应该以 1:1:2 的比例分配任何空闲空间,即如果有 40 个额外像素可用,则 10 到navigationTree10 到 10 到clusteringPlot20 到browser

于 2012-07-17T14:01:01.093 回答