Ошибка сегментации в QPixmap::load

Это код:

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);
    }

}

Как я могу решить эту ошибку?

Кстати, я использую Qt 4.8 с последней версией Qt Creator на Ubuntu 12.04.

Пробовал с обоями, вылетает. Я пробовал с моим id 1x1, вылетел (как грубо...), я пробовал с полосой моего расписания экзаменов (вырезано из другого изображения), он сказал, что загрузился, но QLabel PicView1 ничего не отображает .

Я попытался объявить QPixmap глобальной переменной, получил segfault.


person Rek    schedule 26.02.2012    source источник
comment
Заполнение нулевого растрового изображения не имеет особого смысла, и нет причин, чтобы код, который вы разместили, не работал, проблема, вероятно, в другом месте. Вы уверены, что loc вещь действительно является действительной, живой QString?   -  person Mat    schedule 26.02.2012
comment
Да, меня заверили, что у него есть содержимое, как сказало представление отладки Qt Creator.   -  person Rek    schedule 26.02.2012
comment
Даже неверный путь не должен вызывать сбой QPixmap. Попробуйте использовать разные файлы изображений, чтобы убедиться, что это не ошибка в коде чтения изображений.   -  person Frank Osterfeld    schedule 26.02.2012
comment
Пробовал с обоями, вылетает. Я попробовал его с моим id 1x1, вылетел (как грубо...), я попробовал его с полосой моего расписания экзаменов (вырезанной из другого изображения), он сказал, что загрузился, но QLabel PicView1 ничего не отображает.   -  person Rek    schedule 26.02.2012
comment
это тоже случилось со мной!! как вы решили эту проблему?   -  person PsP    schedule 18.10.2014


Ответы (1)


Не заполняйте изображение белым перед загрузкой... Используйте QPixmap, следовательно:

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

Будьте осторожны, все типы изображений не могут быть прочитаны с помощью QT. Посмотрите здесь QtImageReading, чтобы увидеть тип данных, поддерживаемый QT.

person Adrien BARRAL    schedule 26.02.2012
comment
Неподдерживаемый тип изображения не должен вызывать segfault, он просто приведет к тому, что load вернет false. (Теперь поврежденный файл изображения потенциально может выявить ошибки в декодере изображения. Хотя это кажется натяжкой.) - person Mat; 26.02.2012
comment
Я попробовал loc1 = loc;, затем использовал pmap.load(loc1);, но все равно дает ошибку сегментации. Изображение имеет формат .jpeg. - person Rek; 26.02.2012
comment
Можно ли открыть ваше изображение с помощью стороннего программного обеспечения, такого как gimp, eog или ms paint? Как сказал Рек, возможно, ваш образ поврежден. Вы хотите отправить мне свое изображение, я могу попробовать загрузить его в qpixmap - person Adrien BARRAL; 26.02.2012
comment
Хорошо, не могли бы вы опубликовать мне результат qDebug() ‹‹ loc1. Вы абсолютно уверены, что во время загрузки происходит segfault? Я просто попробовал следующий код на своем компьютере, и все в порядке: QString loc("./toto.jpg"); QString loc1 = loc; QPixmap pmap; qDebug() << "Loading : " << loc1; pmap.load(loc1); qDebug() << "Loaded : " << loc1; - person Adrien BARRAL; 26.02.2012
comment
Насколько велико ваше изображение? Не могли бы вы прислать его мне? - person Adrien BARRAL; 26.02.2012
comment
Я не изменил код, вот вывод: Загрузка: ./toto.jpg Загружено: ./toto.jpg изображение, которое я пытаюсь использовать, находится здесь: i.imgur.com/yG3bP.jpg - person Rek; 26.02.2012
comment
У меня нет segfault при загрузке этого изображения с кодом, который я написал в предыдущем комментарии. - person Adrien BARRAL; 26.02.2012