2012-07-16 110 views
0

我有一个水平布局作为中央控件的QMainWindow。水平布局包含三个小部件。 这里是代码:QWebView没有正确调整大小

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(扩展了QWidget)和navigationTree(扩展QTreeWidget)做的。

我怎样才能改变我的代码,这样也浏览器中得到调整?我看了一下类似的问题,但我找不到解决我的问题的方法。

感谢很多提前 罗塞拉

+0

这样做的正确的方式取决于你怎么想,你正在做可供指派额外的空间。你是否希望在你的小部件之间按照相同的比例分配额外的空间?你想把这个空间分配给你的一个小部件吗?也许你想'clusteringPlot'获得额外空间的三分之一,而'browser'获得剩下的三分之二?如果您可以提供更多信息,我很乐意提供更详细的答案:) – sjwarner 2012-07-16 12:54:20

+0

理想情况下,我希望NavigationTree具有1/4的空间,ClusteringPlot具有1/4和浏览器具有剩余的1/2。我的问题是,如果我让浏览器小于一定大小(1024x648)而不是调整网页大小,我会得到一个可滚动的区域,我想避免 – Rossella 2012-07-17 02:22:36

回答

0

决定如何分配空间时,布局查询其子女的最小尺寸。因此,你的首要任务是确保所有的部件占据你的QHBoxLayout知道他们的最小可用大小是什么:

  • 由于NavigationTree继承QTreeWidget,我假设它已经提供一个合理的最小尺寸(通过minimumSizeHint()继承自QAbstractScrollArea))。如果这需要改变,重新执行QWidget::minimumSizeHint()如下。
  • 如果ClusteringPlot直接从QWidget继承,它可能不是提供一个合理的最小尺寸的布局,所以你需要提供一个。你可以将或者作为虚拟函数QWidget::minimumSizeHint()作为ClusteringPlot(特别有用,如果你能够根据对象的状态计算大小)请致电clusteringPlot->setMinimumSize(...);
  • 由于您口述的最小尺寸为您QWebView,叫browser->setMinimumSize(1024, 768);

一旦已经分配给满足其各子构件的minimumSizeHint() S的足够的空间,一个QBoxLayout开始分配剩余空间根据每个插件的stretchFactor。设置拉伸因子的最简单方法是将小部件添加到布局。试着改变你的代码:

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

这告诉任何空余空间应该在比1被分配布局:1:2,即,如果40个额外的像素变得可用,10去navigationTree,10 clusteringPlot和20至browser

+0

我试过你的解决方案,但是这并不能解决我的问题。当我打开窗口时,所有的尺寸都是合适的,但是一旦窗口变小,浏览器就会滚动而不是调整显示的网页大小。有没有办法调整浏览器中显示的网页大小,使其永远不会滚动? – Rossella 2012-07-19 07:29:29