调整窗口大小以适应内容

17
我有一个QGLWidget,想要将其调整为给定的分辨率(大于所在窗口)。 我的意图是让窗口扩展到小部件适合其中,但找不到方法来实现。
我尝试了几个命令来调整QGLWidget大小,但都没有成功。 以下是我的尝试结果:
- 什么也不做:小部件重叠整个窗口。最终它将被调整大小以适应较小的窗口 - `mainWindow.adjustSize()`:小部件被调整为(0,0) - `mainWindow.resize(mainWindow.sizeHint())`:见上文 - `mainWindow.resize(mainWindow.minimumSizeHint())`:见上文
我还在此线程中阅读到,在调整mainWindow大小之前需要运行事件循环以重新计算新的大小,因此我插入了QCoreApplication::processEvents来这样做,但没有任何可见效果。
那我如何通过小部件调整窗口大小? 编辑 GLWidget不是窗口中唯一的小部件。 它与一个分裂器一起嵌入在一个组框中。

抱歉,我误点了踩按钮,但我并不是有意为之。我试图撤销,但它不让我这样做。请原谅我 :( - ismailsunni
那么...你找到解决方法了吗?我也有完全相同的问题,不得不妥协使用setMinimumSize() - user15202364
2个回答

15

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

如果你在QMainWindow的中心部件中嵌套了QGLWidget,则需要设置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();
希望这能有所帮助。

虽然这确实将窗口调整为所需的大小,但它防止用户进一步调整大小。来自文档:设置小部件的最小和最大尺寸为s,从而防止其增长或缩小。我尝试保存并恢复旧的最小和最大尺寸,但结果没有任何改变。 - Nobody moving away from SE
“minimumSize” 对我来说也不太对。用户应该能够任意调整大小。我只需要窗口弹出到适合 “QGLWidget” 请求大小的尺寸即可。 - Nobody moving away from SE
你尝试过使用glw->setSizeHint(500,500);后跟着this->adjustSize()或者this->resize(glw->sizeHint());吗? - phyatt
1
嗯,似乎没有 setSizeHint() 函数。并且 this->resize(glw->sizeHint()) 不会使窗口太小(因为边框和其他小部件)吗? - Nobody moving away from SE
1
你是正确的。这里有关于它的详细解释:http://qt-project.org/doc/qt-4.8/application-windows.html - phyatt
显示剩余2条评论

4

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

我使用了QLabel小部件来显示图像,但它也适用于其他小部件类型。我使用初始大小创建了小部件和QSizePolicy::Ignored

label->resize (w, h); // initial size
label->setSizePolicy (QSizePolicy::Ignored, QSizePolicy::Ignored);
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

不幸的是,这对我不起作用。小部件已被调整大小,但窗口上的adjustSize()使窗口大小缩小到小部件以下。也许是由于我正在使用的分隔符引起的。 - Nobody moving away from SE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接