【问题标题】:adjust size after child widget resized in Qt在 Qt 中调整子小部件的大小后调整大小
【发布时间】:2014-05-30 19:58:48
【问题描述】:

我正在编写一个非常简单的测试程序,当单击按钮时,GraphicsView 将显示图像,使用网格布局。我希望窗口大小根据图像大小自动调整。代码类似于

// load image and setup scene
// ...
ui->graphicsView->show();
ui->graphicsView->updateGeometry();

// adjustSize();
adjustSize();

问题是当调用adjustSize() 时,窗口不会调整到正确的大小,我必须调用adjustSize() 两次或在调用adjustSize() 之前显示一个QMessageBox 来调整窗口到正确的大小。顺便说一句resize(sizeHint()) 给出了相同的结果

我想知道为什么会发生这种情况,有没有一种优雅的方法可以正确地做到这一点?非常感谢。

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    当您调用adjustSize() 时,之前的调用都没有任何可见的影响,因为这些影响仅在事件循环运行时才会产生。多次调用它可能会间接地从事件循环中排出一些事件,与通过exec() 或静态方法显示QMessageBox 相同。

    您需要从事件循环中调用adjustSize。由于它不可调用,因此您需要在您的小部件类(或辅助类)中进行调用。

    // 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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-28
      相关资源
      最近更新 更多