在Qt中调整子部件大小后调整大小
adjust size after child widget resized in Qt
我正在编写一个非常简单的测试程序,当单击按钮时,GraphicsView将显示图像,使用网格布局。我希望窗口大小根据图像大小自动调整。代码类似于
// load image and setup scene
// ...
ui->graphicsView->show();
ui->graphicsView->updateGeometry();
// adjustSize();
adjustSize();
问题是,当adjustSize()
被调用时,窗口没有调整大小到正确的大小,我必须调用adjustSize()
两次或在调用adjustSize()
之前显示一个QMessageBox来调整窗口的大小以纠正大小。顺便说一下,resize(sizeHint())
给出了相同的结果
我想知道为什么会发生这种情况,是否有一种优雅的方法来正确地做到这一点?多谢。
当您调用adjustSize()
时,前面的调用都没有任何可见的效果,因为这些效果只有在事件循环运行时才会产生。你多次调用它所做的可能是间接地从事件循环中抽取一些事件,通过exec()
或静态方法显示QMessageBox
也是如此。
需要从事件循环中调用adjustSize
。因为它是不可调用的,所以您需要在您的小部件类(或helper类)中这样做。
// Interface
class MyWidget : public QWidget {
Q_OBJECT
Q_INVOKABLE void adjustSize() { QWidget::adjustSize(); }
...
};
// Implementation
void MyWidget::myMethod() {
// ...
ui->graphicsView->show();
ui->graphicsView->updateGeometry();
QMetaObject::invokeMethod(this, "adjustSize", Qt::QueuedConnection);
}
相关文章:
- Qt 图表条形图调整大小崩溃
- 在Qt中自动调整小部件的大小
- 如何在Qt TableView中将列的宽度调整为数据并将最后一部分拉伸在一起
- Qt - 防止在拖动标题栏时调整窗口大小
- 为什么使用Qt Creator调整.ui文件会导致编译期间对.h文件进行更改
- 调整QT创建者的复选框
- QT QML ListView布局未调整大小
- Qt:如何调整QGraphicsItem以动态更改大小
- 当我在QT上调整图像大小时,如何将重点放在小部件的中间点
- QT调整窗口大小后,删除窗口后
- 可滚动的背景,上面有可调整大小的Qt小部件
- QT-检测所有小部件何时首次完成调整大小
- Qt QGraphicsSvgItem缩放和调整大小
- 为什么我的 qt centralWidget(一个 QGLWidget)不能正确调整大小?
- 使用Qt,如何使用鼠标向上或向左移动事件来调整小部件的大小
- 根据Qt表调整流量布局
- Qt QQuickView视觉错误/调整大小时闪烁
- 我可以在不手动调整Qt大小的情况下调用调整大小事件吗?
- 如何在Linux(Ubuntu)中调整Qt Creator for VTune放大器
- 调整QT中从QWindow继承的另一个类中的事件大小