2012-02-26 54 views
2

這是代碼:分段故障::負載

void MainWindow::setPic(QString loc, int panel) 
{ 
    if(panel == 1) 
    { 
     loc1 = loc; 
     QPixmap pmap; 
     facedetect(loc1.toStdString(), 1, "CAND1.jpg"); 
     qDebug() << "Loading : " << loc1; 
     pmap.load(loc1); // I'm getting the segfault error in this line 
     qDebug() << "Loaded : " << loc1; 
     ui->PicView1->setPixmap(pmap); 
    } 

} 

我怎麼能解決這個問題?

順便說一下,我在Ubuntu 12.04上使用Qt 4.8和最新的Qt Creator。

我試過用壁紙,它崩潰了。我用我的1x1編號的圖片試了一下,崩潰了(多麼粗魯......),我試了一下我的檢查時間表(從不同的圖像裁剪),它說它已加載,但QLabelPicView1不顯示任何東西。

我試着宣稱QPixmap爲全局變量,出現段錯誤。

+1

填充空像素圖沒什麼意義,並且沒有任何理由讓你發佈的代碼失敗,問題可能在其他地方。你確定loc函數確實是一個有效的QString嗎? – Mat 2012-02-26 09:40:28

+0

是的,我確信它有內容,Qt Creator的調試視圖表示它有。 – Rek 2012-02-26 09:49:27

+0

即使無效路徑也不能使QPixmap崩潰。嘗試使用不同的圖像文件,以確保它不是圖像閱讀代碼中的錯誤。 – 2012-02-26 12:03:08

回答

0

不要用白色填充你的圖像加載之前... 使用的QPixmap因此:

QString loc; 
// fill loc with a path to your image file. 
QPixmap pmap; 
pmap.load(loc); 

要當心,所有的圖像類型不能用QT閱讀。看看這裏QtImageReading看到QT支持的數據類型。

+0

不支持的圖像類型不應引發段錯誤,它只會使'load'返回false。 (現在一個_corrupted_圖像文件可能會在圖像解碼器中發現錯誤,儘管看起來像一個伸展。) – Mat 2012-02-26 10:07:08

+0

我試過'loc1 = loc;'然後使用'pmap.load(loc1);'仍然給段錯誤。圖像是'.jpeg'格式。 – Rek 2012-02-26 11:27:37

+0

你的圖像是否可以用像gimp,eog或ms paint這樣的第三方軟件來打開?正如rek所說,也許你的圖像被破壞了。你想發送你的圖像,我可以嘗試加載它在qpixmap – 2012-02-26 13:52:19