0

私のプログラムは計算を実行し、( を使用してQPixmap) ラベルに描画されたいくつかの回路図を出力します。すべてのタブにラベルを表示します。

次の計算が終わって図面が小さくなったら、タブのサイズも小さくしたいです。しかし、そうはなりません。タブのサイズはそのままです。

最初に以前のすべてのタブを ) で削除してremoveTab(から、新しいタブを作成します。削除されない唯一のものはQTabWidget、もちろんそれ自体です。

小さな図面から始めると、図面が大きくなるにつれてタブのサイズが大きくなります。しかし、それは逆には機能しません。

どうすればこれを修正できますか? 次のコードは機能しません。

layout_tabs = new QTabWidget;
layout_tabs->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);

QT-4.8.4 を使用しています。

4

1 に答える 1

-1

小さいラベルに切り替えた後、マウスを使用して手動でウィンドウのサイズを小さくできますか?

もしそうなら、おそらく何が起こっているかというと、親ウィジェット (つまり、ウィンドウ) がより大きな子 QTabWidget に対応するようにサイズ変更されたということです。小さなラベルが大きなラベルの後に表示される場合、QTabWidget は、そのレイアウト階層で同じレベルにある別のウィジェットが優先されない限り、親によって与えられたのと同じくらい多くのスペースを占有します。親ウィンドウが小さくなっていないため、QTabWidget も小さくなりません。

したがって、タブを削除した後、親ウィジェット (QMainWindow など) のサイズを変更してみてください。タブ ウィジェットが従う必要があります。Qt では、多くの場合、縮小は上から行う必要がありますが、拡大は上または下から行うことができます。このようなものはうまくいくかもしれません(テストされていません)...

while(layout_tabs->count() > 0)
{
    QWidget* removedtab = layout_tabs->widget(0);
    layout_tabs->removeTab(0); //removeTab() doesn't delete the widget
    removedtab->deleteLater(); //so you have to delete it yourself
}
layout_tabs->updateGeometry();
mainwindow->resize(mainwindow->minimumSize());

編集QLayoutTab::removeTab()は削除したタブを削除しないことに注意してください。そのため、削除したタブには親がなくなるため、追加したばかりのコード スニペットのように、自分で削除する必要があります。

于 2013-02-05T21:10:40.760 に答える