2013-06-07 1 views
0

Я пытаюсь запустить два потока. Один из них - не-Gui-нить, а другой - поток GUI. Теперь, когда я пытаюсь поместить изображение в QLabel с помощью команды
imageLabel->setPixmap(QPixmap::fromImage(image));
тогда я получаю сообщение об ошибке: QPixmap: Это не безопасно использовать растры за пределами GUI потоке.Как установить QLabel с помощью setPixmap из указателя QImage * image?

Итак, чтобы решить вышеупомянутую проблему. Я объявил QImage *image; в моем файле заголовка, и я получаю свое изображение с msg на * image с помощью image = new QImage(&(msg->data[0]), msg->width, msg->height, QImage::Format_RGB888);, а затем я хочу установить свое изображение в QLabel с этого указателя. Но я не понимаю, какой формат setPixmap следует использовать сейчас. Обычный код imageLabel->setPixmap(QPixmap::fromImage(image)); сейчас не работает QImage *image является указателем типа.

Таким образом, в основном я пытаюсь сделать следующее: -

QImage *image; //in header file 
QLabel *imageLabel: //in header file 

image = new QImage(&(msg->data[0]), msg->width, msg->height, QImage::Format_RGB888); 
imageLabel->setPixmap(QPixmap::fromImage(???????)); 

ответ

1

Вы должны использовать * оператор для преобразования QImage* в QImage&:

imageLabel->setPixmap(QPixmap::fromImage(*image)); 

Но если вы получаете «вне GUI thread "в вашем сообщении об ошибке, вы пытаетесь установить pixmap метки в другом потоке. Это невозможно. Помимо проблемы QPixmap, также запрещено использовать объекты GUI за пределами потока GUI.

+0

На самом деле я объявил функцию 'void SelectionInterface :: assignImage()' как функцию слота в файле заголовка. Затем я хочу вызвать эту функцию при нажатии кнопки. Внутри этой функции я хочу присвоить '* image'' imageLabel', обратившись к коду 'imageLabel-> setPixmap (QPixmap :: fromImage (* image)); но когда я нажал кнопку ... тогда ничего не происходит – skm

+0

Чтобы проверить, работает ли fuction как функция слота или нет, я попытался поместить некоторый текст в imageLabel, когда нажата кнопка ... и это сработало. И затем в том же funtion, я попытался загрузить некоторое изображение с моего компьютера и поместить его в imageLabel при нажатии кнопки .... это не сработало. Не могу понять, почему? – skm

+0

Возможно, вам нужно создать другой вопрос с более подробным объяснением. Эта проблема полностью отделена от вашего первоначального вопроса. –