QT:自定义图像流小部件进入无限递归

时间:2015-10-06 12:34:11

标签: c++ qt

我有一个图像来源,我希望一个接一个地向用户显示并向用户显示。 为此,我创建了一个QWidget应用程序,并尝试创建一个自定义窗口小部件,其工作只是绘制它接收的图像(在帖子末尾附加的代码)。 我通过在Designer中添加一个小部件并将其提升到适当的类来使用它。 当运行所述小部件时,程序崩溃并显示消息" QWidget :: repaint:检测到递归重绘"。 什么可能导致它的想法?

请注意,我没有项目中的任何自定义代码,只有几个按钮点击事件可以更改活动的StackedWidget,其他一切都是由设计师自己严格生成的。

小部件标题:

#ifndef IMSTREAMWIDGET_H
#define IMSTREAMWIDGET_H

#include <QWidget>
#include <QImage>
#include <QPainter>
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

class ImStreamWidget : public QWidget
{
    Q_OBJECT

public:
    explicit ImStreamWidget(QWidget *parent = 0) : QWidget(parent){}
    virtual ~ImStreamWidget(){}
    void updateImage(cv::Mat image);
    void paintEvent(QPaintEvent* e);

private:
    QImage *_image;
};

#endif // IMSTREAMWIDGET_H

小部件来源:     #include&#34; imstreamwidget.h&#34;

void ImStreamWidget::updateImage(cv::Mat image){

cv::cvtColor(image, image, CV_BGR2RGB);

// _image is created according to video dimensions
if (_image)
{
    delete _image;
}
_image = new QImage(image.size().width, image.size().height, QImage::Format_RGB888);

// Copy cv::Mat to QImage
memcpy(_image->scanLine(0), (unsigned char*)image.data, _image->width() * _image->height() * image.channels());

// Resize the window to fit video dimensions
resize(image.size().width, image.size().height);
}

void ImStreamWidget::paintEvent(QPaintEvent* e)
{
    QPainter painter(this);

    // When no image has been loaded, there's nothing to draw.
    if (_image){
        painter.drawImage(QPoint(0, 0), *_image);
    }
    QWidget::paintEvent(e);
}

0 个答案:

没有答案