Ошибка сегментации изображения при масштабировании - PullRequest
0 голосов
/ 11 октября 2018

Если размер окна постоянно изменяется после того, как setImage был вызван хотя бы один раз, приложение случайным образом выдает ошибку сегментации.Появляется отладчик, указывающий, что ошибочной строкой является вызов image.scaled () в canvas.cpp.Я не уверен, как отследить это дальше.

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 голосов
/ 13 октября 2018

Я бы лучше использовал QWidget и paintEvent в качестве виртуальной защиты.

...