簡體   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