2016-12-13 7 views
0

アプリケーションが起動されているが初期のウィジェットが作成されているときなど、アプリケーションを起動すると、レイアウトに2つのウィジェットを持つQSplitterを追加します。ウィジェットは利用可能なスペースの60/70%を多かれ少なかれ占有しますが、最初のウィジェットは残りのスペースを取る(スプリッターのサイズ自体を考慮に入れて)。Qt:QSplitter、redo sizes

ので、初めに、自身が示されているウィンドウの前に、私はそのように多かれ少なかれこれら二つのウィジェットを再調整してみてください:

splitter->setOrientation(Qt::Vertical); 
auto sizes = splitter->sizes(); 

int& first_w = sizes.front(); // == 0 
int& second_w = sizes.last(); // == 0 
int diff = form_w * 2.3 - tbl_w; (30% * 2.3 = ~70%) 

second_w += diff; 
first_w -= diff; 

splitter->setSizes(sizes); 

しかし、first_wsecond_w00、私はドンが含ま」サイズがまだ計算されていないか、またはウィジェットがまだ表示されていない(ウィンドウが表示されていない)ため、不可視ウィジェットのサイズが0であるかどうかを知ることはできません。

これらのウィジェットの「将来の」サイズを取得するにはどうすればよいですか? splitterQVBoxLayoutの中にあり、所有者ウィジェットの利用可能なスペースは、ウィンドウの垂直スペースの多かれ少なかれです(QVBoxLayoutを所有するウィジェットの上にはQTabBarしかなく、ウィンドウ内に少しのパディングがあります)。

答えて

0

docsによると、以下が正しいことを行う必要があります...

splitter->setSizes(QList<int>() << 30 << 70); 

QSplitterは、下にトップウィジェットには30%と70%を配分すべきであるという垂直である場合。

+0

いいえ、動作しません(私はテストしています)。その値は、私が思うにはピクセル単位でサイズを設定し、その中には空き領域がたくさんあるので、値は完全に 'sizeHint'sに置き換えられます。問題のウィジェットは、フォーム内部に垂直方向のスペースが大きすぎる 'QTextEdit'です。 –

0

メソッドQSplitter::sizes()は、ウィジェットが表示されている場合に限り、非ゼロサイズを示すようです。私が通常この問題を回避するために行うのは、オーバーライドQWidget::showEvent(QShowEvent *event)で、メソッドQSplitter::setSizes()を呼び出します。

+0

それは正しい!私はそれについて考えなかった。しかし、私は、スロットを '示された'信号に接続する方がより良い方法だと思っていますが、ああ!! '示された'シグナルはありません! –

関連する問題