如何动态调整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(qmargin (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 ℑ const QString &status){m_pLabel -> setPixmap (QPixmap:: fromImage(图片);m_pMessage -> setText(状态);}之前这工作得很好,我的程序从共享内存段(从不同的进程生成)捕获视频,视频显示在这个窗口中。
然而,视频图像大小可以改变,所以我试图扩展这一点,以动态地改变不同大小的视频。我的共享内存头提供了关于图像大小的信息。所以我可以在大小变化时发出信号。
当前在槽中,我删除QImage obj,然后用新的大小创建一个新的QImage obj。这样的:
<>之前无效对话框:updatePictureSize (){删除m_pCaptureImage;m_pCaptureImage = new QImage(m_nPictureWidth, m_nPictureHeight, QImage::Format_RGB32);m_pCaptureWin ->重画();m_pCaptureWin -> show ();}之前正如我所说,这工作得很好,但是CaptureWin不调整大小,只有QImage。因此,当我从大视频大小切换到小视频大小时,基本窗口不会改变,我只剩下一个大的白色窗口,里面有一个小图像。
我越想这个,我认为这是一个非常糟糕的设计,因为QVBoxLayout,它有一个QImage的引用,不知道它已经改变了。
那么,什么是适当的方式来让CaptureWin对象调整大小,以适应新的QImage大小?
谢谢,
andres
如果窗口应该总是和图像一样大,并且用户不应该能够调整它的大小,那么vbox->setSizeConstraint(QLayout::SetFixedSize)
将完成这项工作。
相关文章:
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- C++中的动态铸造故障
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 内联映射初始化的动态atexit析构函数崩溃
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 控制允许动态运行c++的并发操作数
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 输出没有重复元素的动态数组(收缩数组)C++
- C++为线程工作动态地分割例程
- 正在插入动态数组
- Python中的for循环与C++有何不同
- 在c++中使用动态分配的问题
- 动态对象数组在C++和Java中有何不同?
- 创建动态数组后,"i"变量不知从何而来
- QImage数组的动态分配
- 在C++中,动态数组与静态绑定数组有何不同
- 如何动态调整QLabel/QVBoxLayout/QWidget中使用的QImage的大小