从Qt5Widgets调用setFixedSize()时出现未处理的异常

Unhandled exception while calling setFixedSize() from Qt5Widgets

本文关键字:未处理 异常 Qt5Widgets 调用 setFixedSize      更新时间:2023-10-16

我正在visual studio中使用Qt库开发一个代码。作为Qt班的孩子,我有一个a级班。

class A::A(QWidget *parent, QGLWidget *shareWidget) : QGLWidget(parent, shareWidget)

这个类的成员函数之一是:

void A::setImage(Image *image)
{
    m_image = image;
    setFixedSize(image->width(), image->height());
}

(其中setFixedSize是父类QWidget的一个方法)

在以下事件中从另一个类调用该方法:

bool B::event(QEvent* e)
{
    QWidget::event(e);
    ...
    A instA = new A();
    instA.setImage(*image)
    ...
}

以下异常在setFixedSize处抛出,尽管传递的值实际上是普通的int,比如width=height=500。

Unhandled exception at 0x54A6B056 (Qt5Widgetsd.dll):
0xC0000005: Access violation reading location 0x939394BC.

这个方法setImage在运行代码时调用了好几次,效果非常好。这个问题只出现在B::event(QEvent*e)中。

PS:这个方法在这一点上不起作用,即使我直接传递像setFixedSize(500500)这样的常数值。

期待任何建议。

A instA = new A();
instA.setImage(*image)

这在我看来很荒谬。你能给出准确的编译代码吗。

其次,在使用pointers时,请确保它们不是null

所以你的功能应该是这样的-

void A::setImage(Image *image)
{
   if(image)  //Null check, it will enter to block only if image is not null
   {
    m_image = image;
    setFixedSize(image->width(), image->height());
   }
}