【问题标题】:Resizing parent window after child sizes change子大小更改后调整父窗口大小
【发布时间】:2012-12-02 02:07:56
【问题描述】:

我已经为这个问题困扰了好几个小时,并决定是时候问 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 度,图像将被旋转,但窗口不会调整大小以适应新的像素图大小。我曾尝试在SubWindowcentralWidget 上调用adjustSize()updateGeometry(),但这些似乎效果为零。但是,如果我用鼠标手动调整窗口大小,窗口会捕捉到为scrollArea 设置的最小大小,所以这似乎正在生效。

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

【问题讨论】:

    标签: c++ qt layout


    【解决方案1】:

    试试resize(...)函数:Qt documentation

    adjustSize()使用了sizeHint()函数,所以在SubWindow和centralWidget上调用adjustSize()没有任何作用

    【讨论】:

    • 感谢您的建议,但我尝试使用scrollArea 调整centralWidgetVideoSubWindow 的大小,但没有改变:-\
    • 我可能不明白你在做什么,但你应该尝试调整滚动区域的大小......
    • 我昨天试过了,但还是不开心:(我不知道当图像大小改变时如何调整窗口大小。
    猜你喜欢
    • 2023-03-24
    • 2013-09-17
    • 2011-10-01
    • 2016-07-07
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 2012-01-28
    • 2019-05-15
    相关资源
    最近更新 更多