我有一个 QGLWidget,我想将其大小调整为给定的分辨率(大于包含的窗口)。 我的意图是,窗口会展开直到小部件适合内部,但找不到方法来做到这一点。
在调整 QGLWidget 大小以使其工作后,我尝试了几个命令,但没有成功。 我将在这里列出结果:
mainWindow.adjustSize()
:小部件的大小调整为 (0, 0)mainWindow.resize(mainWindow.sizeHint())
:见上文mainWindow.resize(mainWindow.minimumSizeHint())
:见上文我还在这个线程中读到,在调整主窗口大小之前,需要运行事件循环来重新计算新的大小,所以我插入了
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
如果有人来到这里调整表格视图(QTableView)或类似小部件的大小:
tableWidget->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents);
有关 Qt 论坛的更多信息:如何调整 QWidget 大小以适合其内容?