我有一个图像来源,我希望一个接一个地向用户显示并向用户显示。 为此,我创建了一个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);
}