繁体   English   中英

如何动态调整QLabel / QVBoxLayout / QWidget中使用的QImage的大小

[英]How to dynamically resize a QImage used in a QLabel/QVBoxLayout/QWidget

我有一个派生类(从QWidget),它使用带有2个项目的QVBoxLayout,这两个都是QLabel。 顶部QLabel用于显示视频流,底部QLabel用于状态行。 这来自Qt文档中的示例之一。

CaptureWin::CaptureWin()
    {
        QVBoxLayout *vbox = new QVBoxLayout(this);
        vbox->setContentsMargins(QMargins(8, 8, 8, 5));

        m_pLabel = new QLabel();
        m_pMessage = new QLabel("No frame");

        vbox->addWidget(m_pLabel);
        vbox->addWidget(m_pMessage);
    }

    void CaptureWin::setImage(const QImage &image, const QString &status)
    {
        m_pLabel->setPixmap(QPixmap::fromImage(image));
        m_pMessage->setText(status);
    }

一切正常,我的程序从共享内存段捕获视频(通过不同的进程生成),并且该视频显示在此窗口中。

但是,视频图像的大小可以更改,因此我尝试将其扩展为动态更改为不同大小的视频。 我的共享内存标头提供了有关图像(如大小)的信息。 因此,当尺寸改变时,我可以发出信号。

当前在插槽中,我删除了QImage obj,然后创建一个具有新大小的新QImage obj。

void
    Dialog::updatePictureSize()
    {
        delete m_pCaptureImage;
        m_pCaptureImage = new QImage(m_nPictureWidth, m_nPictureHeight, QImage::Format_RGB32);

        m_pCaptureWin->repaint();
        m_pCaptureWin->show();
    }

就像我说的那样,这很好,但是CaptureWin不会调整大小,仅调整QImage。 因此,当我从大视频尺寸更改为小视频尺寸时,基本窗口不会改变,我只剩下一个大白色窗口,里面有一个小图像。

我考虑得越多,我认为这是一个非常糟糕的设计,因为引用了QImage的QVBoxLayout不知道它已经改变了。

那么,使CaptureWin obj调整大小以适应新的QImage大小的正确方法是什么?

谢谢,

-Andres

如果窗口应始终与图像一样大,并且用户不能调整其大小,则可以使用vbox->setSizeConstraint(QLayout::SetFixedSize)来完成此工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM