缩放时的QImage分割错误

时间:2018-10-11 19:28:54

标签: c++ qt segmentation-fault

如果在至少调用一次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);
    }
}

1 个答案:

答案 0 :(得分:0)

我宁愿使用QWidget和paintEvent作为虚拟保护。