在子项更改后调整父窗口的大小

时间:2012-12-14 04:07:10

标签: c++ qt layout

我几个小时一直在搞乱这个问题,并决定是时候问SO:)

我有一个Qt程序可以旋转图像,然后更新窗口小部件的大小。这是我目前用来执行此操作的代码。

void VideoSubWindow::showFrame(const QImage& frame)
{
    QPixmap pixmap = QPixmap::fromImage(frame);
    ui->videoFrameLabel->setPixmap(pixmap);
    resizeWidgets(pixmap.size());
}

void VideoSubWindow::resizeWidgets(const QSize &size)
{
    if(frameSize != size)
    {
        frameSize = size;
        ui->videoFrameLabel->setFixedSize(size);
        ui->scrollArea->setMinimumSize(size.width() + 2, size.height() + 2);
    }
}

小部件的结构如下:

VideoSubWindow (QMainWindow)
 -> centralWidget (QWidget) (Vertical layout is set on this)
   -> scrollArea (QScrollArea)
     -> videoFrameLabel (QLabel)
   -> statusBar (QStatusBar)
   -> menuBar (QMenuBar)

执行上述代码时,如将图像旋转90度,图像将会旋转,但窗口不会调整大小以适应新的像素图大小。我试图在adjustSize()updateGeometry()上致电SubWindowcentralWidget,但这些似乎没有效果。但是,如果我用鼠标手动调整窗口大小,窗口会捕捉到为scrollArea设置的最小大小,因此这似乎正在生效。

有没有人有这方面的经验?谢谢!

1 个答案:

答案 0 :(得分:1)

尝试使用resize(...)功能:Qt documentation

adjustSize()使用了sizeHint()函数,因此在SubWindow和centralWidget上调用adjustSize()不能有任何效果