【问题标题】:QImage segmentation fault upon scaling缩放时的 QImage 分割错误
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 2019-10-13
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    相关资源
    最近更新 更多