调整窗口大小以适合内容

时间:2013-05-09 18:09:13

标签: qt qlayout

我有一个QGLWidget,我想调整大小到给定的分辨率(大于包含的窗口)。 我的意图是,窗口会扩展,直到窗口小部件适合内部,但无法找到方法。

我在调整QGLWidget大小后尝试了几个命令,使其无法正常工作。 我将在此列出结果:

  • 什么都不做:Widget重叠整个窗口。最终它将调整大小以适应较小的窗口
  • mainWindow.adjustSize():窗口小部件调整为(0,0)
  • mainWindow.resize(mainWindow.sizeHint()):见上文
  • mainWindow.resize(mainWindow.minimumSizeHint()):见上文

我还在this thread中读到,在执行mainWindow调整之前,我需要运行事件循环来重新计算新的大小,所以我插入了QCoreApplication::processEvents这样做,没有任何明显的效果。

那么如何通过窗口小部件调整窗口大小?

修改

GLWidget不是窗口的唯一窗口小部件。 它与分组框一起嵌入分离器中。

2 个答案:

答案 0 :(得分:8)

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();

希望有所帮助。

答案 1 :(得分:1)

我的应用需要与您的要求非常相似,所以我会在这里发布我的解决方案。覆盖窗户的图像,可自由扩展和收缩,并可更改为原始尺寸,并在此之后保持可扩展/收缩。

我使用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