2013-06-07 1 views
0

두 개의 스레드를 실행하려고합니다. 하나는 GUI 스레드가 아니고 다른 하나는 GUI 스레드입니다. 내가 명령
imageLabel->setPixmap(QPixmap::fromImage(image));
를 사용하여 QLabel에서 이미지를 넣어하려고 할 때 자, 그럼 내가 오류를 얻을 : QPixmap : 그것은 GUI 스레드 외부 픽스맵을 사용하는 것이 안전하지 않습니다.QImage * image 포인터에서 setPixmap을 사용하여 QLabel을 설정하는 방법?

그래서 위에서 언급 한 문제를 해결하기 위해. 나는 내 헤더 파일에 QImage *image;을 선언했으며, 메시지에서 이미지를 image = new QImage(&(msg->data[0]), msg->width, msg->height, QImage::Format_RGB888);을 사용하여 msg에서 가져온 다음이 포인터에서 QLabel에 이미지를 설정하고 싶습니다. 하지만 이해가 안되는데, 어떤 형식의 setPixmap이 지금 사용되어야합니까. QImage *image은 유형의 포인터이기 때문에 일반적인 코드 imageLabel->setPixmap(QPixmap::fromImage(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 스레드 "오류 메시지에서 다른 스레드에서 레이블의 pixmap 설정하려고합니다. 그것은 불가능합니다. QPixmap 문제 외에도 GUI 스레드 외부에서 GUI 객체를 사용할 수 없습니다.

+0

실제로 헤더 파일의 슬롯 함수로'void SelectionInterface :: assignImage()'함수를 선언했습니다. 그런 다음 단추를 누를 때이 함수를 호출하려고합니다. 이 함수 안에서, 나는'imageLabel' 코드에'imageLabel-> setPixmap (QPixmap :: fromImage (* image));를 써서'imageLabel'을 할당하려고합니다.하지만 버튼을 눌렀을 때 아무 일도 일어나지 않습니다. – skm

+0

fuction이 슬롯 함수로 작동하는지 여부를 확인하려면 .... 버튼을 클릭하면 imageLabel에 텍스트를 넣으려고했습니다. 그리고 나서 같은 기능으로 컴퓨터에서 이미지를로드하고 버튼을 눌렀을 때 imageLabel에 넣으려고했는데 작동하지 않았습니다. 이유를 이해할 수 없습니까? – skm

+0

아마도 더 자세한 설명과 함께 다른 질문을 만들어야 할 것입니다. 이 문제는 원래 질문과 완전히 구분됩니다. –