我遇到了一些直接脫離Qt幫助的QRubberBand
代碼崩潰。崩潰發生在setGeometry
呼叫。 QRubberBand
實例已經創建,因爲我能夠使用qDebug訪問幾何,所以我很困惑。QRubberBand:崩潰與BAD ACCESS錯誤
此背景情況:該代碼是在一個自定義的Widget這是這樣創建的:
ImageLabel2* image = new ImageLabel2(this);
image->setPixmap(pix);
setCentralWidget(image);
我所知道的情況仍然存在,因爲註釋掉setGeometry
呼籲避免崩潰,調試語句繼續被輸出。
我在做什麼明顯錯誤?
調試輸出:
mousePress QPoint(294343)
該程序已意外結束。
從崩潰日誌:
異常類型:EXC_BAD_ACCESS(SIGSEGV)異常代碼: 0x000000000000000d,0x0000000000000000
代碼:
void ImageLabel2::mousePressEvent(QMouseEvent *event)
{
qDebug() << "mousePress" << event->pos();
origin = event->pos();
if (!rubberBand){
rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
}
qDebug() << rubberBand->geometry();
rubberBand->setGeometry(QRect(origin, QSize())); // CRASH
rubberBand->show();
}
謝謝 - 我已經檢查了與使用'QRubberBand :: setGeometry(INT的x,INT Y,INT寬度,INT高度)試圖'同樣的崩潰。我已經縮小到條件化的'if(!rubberBand)'永遠不會進入,所以對象永遠不會被創建。奇。 –
然後檢查'rubberBand'字段是否在構造函數中初始化爲NULL。否則,這個指針可能包含*垃圾*因此在不等於0時不正確。 – NIA
該代碼來自Qt幫助; 'rubberBand'在我的自定義Widget頭文件中聲明,但直到第一個mouseDown事件(延遲加載)才被初始化,所以條件應該會觸發但不會。如果我在我的類構造函數中顯式初始化'rubberBand',那麼它就像預期的那樣工作。 –