【发布时间】:2018-10-11 19:28:53
【问题描述】:
如果在至少调用一次 setImage 后窗口不断调整大小,则应用程序会随机产生分段错误。调试器似乎表明有问题的行是对 canvas.cpp 中 image.scaled() 的调用。我不确定如何进一步追踪它。
canvas.h
#ifndef CANVAS_H
#define CANVAS_H
#include <QGLWidget>
class Canvas : public QGLWidget
{
Q_OBJECT
public:
explicit Canvas(QWidget *parent = 0);
void paintEvent(QPaintEvent* event);
public slots:
void setImage(const QImage& image);
private:
QImage image;
};
#endif // CANVAS_H
canvas.cpp
#include "canvas.h"
Canvas::Canvas(QWidget *parent) :
QGLWidget(parent)
{
}
void Canvas::setImage(const QImage& image) {
this->image = image;
this->update();
}
void Canvas::paintEvent(QPaintEvent *) {
QPainter painter(this);
QSize size = this->size();
if (!image.isNull()) {
QImage scaled = image.scaled(size, Qt::KeepAspectRatio, Qt::SmoothTransformation);
painter.drawImage(0, 0, scaled);
}
}
【问题讨论】:
-
minimal reproducible example 会很有帮助。
-
@JesperJuhl 它目前正在从相机获取图像。精简代码需要一些时间。
-
@JesperJuhl 对不起,我不是想说它是。我只是想礼貌地提醒一下。
-
您应该在绘制之前检查返回的缩放图像是否为空?检查大小是否正确?
-
我想我明白了。正在使用的 QImage 原来只是对在退出的上下文中创建的一个引用。
标签: c++ qt segmentation-fault