我有一个QGLWidget,我想调整大小到给定的分辨率(大于包含的窗口)。 我的意图是,窗口会扩展,直到窗口小部件适合内部,但无法找到方法。
我在调整QGLWidget大小后尝试了几个命令,使其无法正常工作。 我将在此列出结果:
mainWindow.adjustSize()
:窗口小部件调整为(0,0)mainWindow.resize(mainWindow.sizeHint())
:见上文mainWindow.resize(mainWindow.minimumSizeHint())
:见上文我还在this thread中读到,在执行mainWindow调整之前,我需要运行事件循环来重新计算新的大小,所以我插入了QCoreApplication::processEvents
这样做,没有任何明显的效果。
那么如何通过窗口小部件调整窗口大小?
修改
GLWidget不是窗口的唯一窗口小部件。 它与分组框一起嵌入分离器中。
答案 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