QPixmap 导致内存泄漏?

QPixmap causes memory leak?

每次收到有效帧时,我都会从服务器流式传输 MJPEG 并更新 QLabel 的 QPixmap。内存使用量随着时间的推移而膨胀,我不明白为什么。这是对 QPixmap 的错误使用吗?

    case StreamState::Streaming: {
        int ind_start_bytes = m_buffer.indexOf("\xff\xd8");
        int ind_end_bytes = m_buffer.indexOf("\xff\xd9");
        if(ind_start_bytes != -1 && ind_end_bytes != -1) {
            if(ind_start_bytes < ind_end_bytes){
                QByteArray image_data = m_buffer.mid(ind_start_bytes, ind_end_bytes + 2);
                m_buffer = m_buffer.mid(ind_end_bytes+2);
                QPixmap pmap;
                if(pmap.loadFromData(image_data, "JPEG")) {
                    setPixmap(pmap.scaled(pmap.size(), Qt::KeepAspectRatio));
                }
            }
        }
    }

这是完整代码的 github linkmjpegstreamer.cpp 相关代码。

肿胀的是m_buffer。我发布的代码使用 fifo 逻辑的帧。所以我更换了

int ind_start_bytes = m_buffer.indexOf("\xff\xd8");
int ind_end_bytes = m_buffer.indexOf("\xff\xd9");

int ind_start_bytes = m_buffer.lastIndexOf("\xff\xd8");
int ind_end_bytes = m_buffer.lastIndexOf("\xff\xd9");

如果 m_buffer 中存在任何一帧以上的帧,我们将使用最后一帧并删除左侧的帧。 现在问题似乎已经解决了。 这显然与 QPixmap.

无关