2016-07-20 29 views
0

我开发使用Qt库在Visual Studio中的代码setFixedSize()。 我有一个A类作为Qt类的孩子。未处理的异常,同时呼吁从Qt5Widgets

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 = 500

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

这种方法setImage IST叫来几个时间,而乳宁的代码,它工作得很好。问题仅在B :: event(QEvent * e)中出现。

PS:该方法没有在这一点上工作,即使我直接传递恒定值等setFixedSize(500,500)。

期待任何建议。

+0

请提高您的问题(见[MCVE(HTTP://计算器.COM /帮助/ MCVE)),尤其是:完成'setImage'函数签名,表明了全面实施'B :: event',并提供完整的堆栈跟踪。 – Dreamcooled

回答

0
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()); 
    } 
} 
+0

此时指针不为空。我可以在那一刻读到。我什至看到传递给setFixedSize()的值。但我应该承认,我没有如此好的总结我的代码。我应该编辑它。 –