web-dev-qa-db-ja.com

コンテンツに合わせてウィンドウのサイズを変更する

私はQGLWidgetを持っていますが、これを(含まれているウィンドウより大きい)与えられた解像度にサイズ変更したいと思います。私の意図は、ウィジェットが内側に収まるまでウィンドウを拡大することですが、それを行う方法を見つけることができません。

QGLWidgetのサイズを変更した後、いくつかのコマンドを試してみましたが、成功しませんでした。ここに結果をリストします:

  • 他に何もしない:ウィジェットはウィンドウ全体に重なります。最終的には、小さなウィンドウに収まるようにサイズ変更されます
  • mainWindow.adjustSize():ウィジェットは(0、0)にサイズ変更されます
  • mainWindow.resize(mainWindow.sizeHint()):上記を参照
  • mainWindow.resize(mainWindow.minimumSizeHint()):上記を参照

私は this thread も読み取りました。mainWindowのサイズ変更を行う前に、イベントループを実行して新しいサイズを再計算する必要があるため、目に見える効果なしにQCoreApplication::processEventsを挿入しました。 。

では、ウィジェットを使用してウィンドウのサイズを変更するにはどうすればよいですか?

編集

GLWidgetは、ウィンドウの唯一のウィジェットではありません。グループボックスとともにスプリッターに埋め込まれています。

10
Nobody

http://qt-project.org/doc/qt-4.8/qwidget.html#sizePolicy-prop

http://qt-project.org/doc/qt-4.8/qsizepolicy.html#Policy-enum

http://qt-project.org/doc/qt-4.8/qwidget.html#setFixedSize

したがって、QGLWidgetQMainWindow内にネストして中央ウィジェットとして使用する場合、QGLWidgetのサイズポリシーを設定する必要があります。

例えば:

QGLWidget * glw; // in your header for QMainWindow

...

// In your constructor for QMainWindow
glw = new QGLWidget;
this->setCentralWidget(glw);
glw->setFixedSize(500, 500);

this->adjustSize();

お役に立てば幸いです。

8
phyatt

私はあなたの要件に非常によく似ている必要があるアプリを持っているので、ここに私の解決策を投稿します。自由に伸縮できるウィンドウを覆う画像で、元のサイズに変更でき、その後も伸縮可能です。

QLabelウィジェットを使用して画像を表示しましたが、他のウィジェットタイプでも動作するはずです。初期サイズとQSizePolicy::Ignoredでウィジェットを作成しました。

label->resize (w, h); // initial size
label->setSizePolicy (QSizePolicy::Ignored, QSizePolicy::Ignored);

ラベルウィジェットは、ウィンドウにいくつかのボタンがあるQVBoxLayoutにありましたが、これは他のレイアウトタイプでも機能する場合があります。

ウィンドウと画像ウィジェットは、次のコードで画像の元のサイズにサイズ変更できます。

label->resize (w, h); // change to original size
label->setMinimumSize (w, h); // prevent it from collapsing to zero immediately
window->adjustSize (); // resize the window
label->setMinimumSize (0, 0); // allow shrinking afterwards
2
gregn3