15

我有一个 QGLWidget,我想将其调整为给定的分辨率(大于包含窗口)。我的意图是,窗口会展开,直到小部件适合里面,但找不到办法。

我在调整 QGLWidget 的大小后尝试了几个命令以使其无法成功运行。我将在这里列出结果:

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

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

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

编辑

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

4

2 回答 2

11

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

希望有帮助。

于 2013-05-09T19:56:15.127 回答
4

我有一个需要与您的要求非常相似的应用程序,所以我将在此处发布我的解决方案。覆盖窗口的图像可以自由扩展和收缩,并且可以更改为原始大小,之后保持可扩展/可收缩。

我使用 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
于 2014-11-25T22:15:06.180 回答