【问题标题】:Segmentation fault on QPixmap::loadQPixmap::load 上的分段错误
【发布时间】:2012-03-16 03:47:34
【问题描述】:

这是代码:

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 id pic 试了一下,崩溃了(多么粗鲁......),我用我的考试时间表(从不同的图像裁剪)试了一下,它说它已加载,但 QLabel PicView1 没有'不显示任何东西。

我尝试将QPixmap 声明为全局变量,但出现了段错误。

【问题讨论】:

  • 填充空像素图没有多大意义,并且您发布的代码没有理由失败,问题可能出在其他地方。您确定 loc 确实是一个有效的、实时的 QString 吗?
  • 是的,我确信它有内容,Qt Creator 的调试视图说有。
  • 即使是无效的路径也不能让 QPixmap 崩溃。尝试使用不同的图像文件,以确保它不是图像读取代码中的错误。
  • 我用壁纸试过了,它崩溃了。我用我的 1x1 id pic 试了一下,崩溃了(多么粗鲁......),我用我的考试时间表(从不同的图像裁剪)试了一下,它说它已加载,但 QLabel PicView1 不显示任何东西。
  • 这也发生在我身上!!你是怎么解决这个问题的?

标签: qt load segmentation-fault qpixmap


【解决方案1】:

在加载之前不要用白色填充你的图像...... 因此使用 QPixmap :

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

请注意,QT 无法读取所有图像类型。查看这里QtImageReading 以查看 QT 支持的数据类型。

【讨论】:

  • 不支持的图像类型不应引发段错误,它只会使 load 返回 false。 (现在,损坏的图像文件可能会发现图像解码器中的错误。不过看起来有点牵强。)
  • 我试过 loc1 = loc; 然后用 pmap.load(loc1); 仍然给出段错误。图片为.jpeg格式。
  • 您的 imge 是否可以使用 gimp、eog 或 ms paint 等第三方软件打开?正如 rek 所说,也许您的图像已损坏。你想把你的图片发给我吗,我可以尝试在 qpixmap 中加载它
  • 好的,你能把qDebug()的结果发给我吗QString loc("./toto.jpg"); QString loc1 = loc; QPixmap pmap; qDebug() << "Loading : " << loc1; pmap.load(loc1); qDebug() << "Loaded : " << loc1;
  • 你的图片有多大?可以发给我吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
相关资源
最近更新 更多