我有一个派生类(来自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。因此,当我从大视频大小变为小视频大小时,基本窗口不会改变我留下了一个内部有小图像的大白窗口。
我越想到这一点,我认为这是非常差的设计,因为QVBoxLayout(它引用了QImage)并不知道它已经改变了。
那么,让CaptureWin obj调整大小以适应新的QImage大小的正确方法是什么?
谢谢,
-Andres
答案 0 :(得分:0)
如果窗口应该始终与图像一样大,并且用户无法调整大小,那么vbox->setSizeConstraint(QLayout::SetFixedSize)
就可以完成这项任务。