[英]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.