私はQGLWidgetを持っていますが、これを(含まれているウィンドウより大きい)与えられた解像度にサイズ変更したいと思います。私の意図は、ウィジェットが内側に収まるまでウィンドウを拡大することですが、それを行う方法を見つけることができません。
QGLWidgetのサイズを変更した後、いくつかのコマンドを試してみましたが、成功しませんでした。ここに結果をリストします:
mainWindow.adjustSize()
:ウィジェットは(0、0)にサイズ変更されますmainWindow.resize(mainWindow.sizeHint())
:上記を参照mainWindow.resize(mainWindow.minimumSizeHint())
:上記を参照私は this thread も読み取りました。mainWindowのサイズ変更を行う前に、イベントループを実行して新しいサイズを再計算する必要があるため、目に見える効果なしにQCoreApplication::processEvents
を挿入しました。 。
では、ウィジェットを使用してウィンドウのサイズを変更するにはどうすればよいですか?
編集
GLWidgetは、ウィンドウの唯一のウィジェットではありません。グループボックスとともにスプリッターに埋め込まれています。
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
したがって、QGLWidget
をQMainWindow
内にネストして中央ウィジェットとして使用する場合、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();
お役に立てば幸いです。
私はあなたの要件に非常によく似ている必要があるアプリを持っているので、ここに私の解決策を投稿します。自由に伸縮できるウィンドウを覆う画像で、元のサイズに変更でき、その後も伸縮可能です。
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