0

中央のウィジェットとして水平レイアウトのQMainWindowがあります。水平レイアウトには3つのウィジェットが含まれています。コードは次のとおりです。

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(extends QWidget)およびnavigationTree(extends QTreeWidget)がサイズ変更している間、メインウィンドウのサイズを変更するたびにブラウザーのサイズが変更されません。

ブラウザもサイズ変更されるようにコードを変更するにはどうすればよいですか?同様の質問を調べましたが、問題の解決策が見つかりませんでした。

よろしくお願いしますRossella

4

1 に答える 1

0

レイアウトは、スペースの割り当て方法を決定するときに、その子の最小サイズを照会します。したがって、最初のタスクは、占有しているすべてのウィジェットが、QHBoxLayoutそれらの最小有効サイズを認識していることを確認することです。

  • NavigationTreeinheritsであるため、(継承された from )QTreeWidgetを介して、適切な最小サイズが既に提供されていると想定しています。これを変更する必要がある場合は、次のように再実装します。minimumSizeHint()QAbstractScrollAreaQWidget::minimumSizeHint()
  • ClusteringPlotから直接継承する場合QWidget、レイアウトに妥当な最小サイズが提供されていない可能性があるため、提供する必要があります。で仮想関数として再実装する(オブジェクトの状態に基づいてサイズを計算できる場合は特に便利です) 、またはを呼び出す ことができます。QWidget::minimumSizeHint()ClusteringPlotclusteringPlot->setMinimumSize(...);
  • の最小サイズを指定しているのでQWebView、 を呼び出しますbrowser->setMinimumSize(1024, 768);

子ウィジェットのminimumSizeHint()のそれぞれを満たすのに十分なスペースが割り当てられるQBoxLayoutと、 は各ウィジェットの に従って残りのスペースの割り当てを開始しstretchFactorます。ストレッチ係数を設定する最も簡単な方法は、ウィジェットをレイアウトに追加するときです。コードを次のように変更してみてください。

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

これは、1:1:2 の比率で任意のスペア スペースを割り当てる必要があることをレイアウトにnavigationTree伝えclusteringPlotますbrowser

于 2012-07-17T14:01:01.093 に答える