2016-07-20 31 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()的值。但我應該承認,我沒有如此好的總結我的代碼。我應該編輯它。 –