如果在至少调用一次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);
}
}
答案 0 :(得分:0)
我宁愿使用QWidget和paintEvent作为虚拟保护。