10

3 つの異なる QWidget を含む単純な QStackedWidget があります。QWidget の最小サイズは (350x200)、(200x100)、および (450x450) です。

だから私が抱えている問題は、QStackedWidget のサイズを変更するときです。その中に最大の QWidget の最小サイズがあります。したがって、2 番目の QWidget ((200x100) のサイズの QWidget) に切り替えると、QStackedWidget はその内部に最大の QWidget があるため (450x450) だけサイズが小さくなります。現在表示されている QWidget に合わせてサイズを縮小し、その最小サイズを削除したいと思います。

4

4 に答える 4

8

最も簡単な解決策は、QStackedWidget をサブクラス化し、sizeHint と minimumSizeHint をオーバーライドして、すべてのウィジェットの最大値ではなく、現在のウィジェットのヒントを返すことだと思います。例えば:

class StackedWidget : public QStackedWidget
{
  QSize sizeHint() const override
  {
    return currentWidget()->sizeHint();
  }

  QSize minimumSizeHint() const override
  {
    return currentWidget()->minimumSizeHint();
  }
};
于 2015-12-15T22:22:57.733 に答える
6

良い質問。残念ながら、Qt は子ウィジェットに応じてサイズを自動的に縮小するメカニズムを提供していません (自動とは、何もする必要がないことを意味します)。焦点のほとんどは拡大することです(サイズポリシーを参照してください

次の 2 つのオプションがあります。

  1. これらのウィジェットを作成するクラスでシグナルとスロットのメカニズムを使用します。シグナルをリッスンしvoid QStackedWidget ::currentChanged ( int index )、stackedwidget のサイズを のウィジェットのサイズに変更する必要がありますindex。これはコーディングが非常に高速です。

  2. QStackedWidget を装飾し、サイズ プロパティを定義します。基本的に両方ともsizeHint()minimumSizeHint()現在のウィジェットのサイズを返す必要があります。Addwidget(QWidget*)変更する必要もあります。積み重ねられたウィジェットをどこでも使用している場合に便利です。

于 2014-05-07T08:12:17.110 に答える
0

ステップ 1: オーバーロード方法:

void resizeEvent(QResizeEvent*)

ステップ 2: 'resize' と 'select page' を呼び出します:

QRect rect;
rect.setBottomRight(stackedWidget->geometry().bottomRight());
currentWidget->setGeometry(rect);
于 2014-06-24T13:44:59.567 に答える