2014-04-22 7 views
2

QImageQGraphicsScene을 표시하고 싶습니다, 내 코드의 매우 간단합니다 :const QPixmap 만 허용하는 경우 QGraphicsScene :: addPixmap을 사용하는 방법은 무엇입니까?

mainwindow.h 컴파일러 다음

QImage *sourceImage; 
QGraphicsView *imageView; 
QGraphicsScene *imageScene; 

mainwindow.cpp

imageScene = new QGraphicsScene; 
imageView = new QGraphicsView; 
imageView->setScene(imageScene); 

sourceImage = new QImage; 
sourceImage.load(":/targetimage.png"); 
imageScene.addPixmap(QPixmap::fromImage(sourceImage)); 

그리고 정확히 내가 뭘 잘못했는지 가리킨다. QGraphicsScene::addPixmap은만을 받아 들인다.을 인수로 사용하고 을 const QPixmap으로 변환하려고 시도했습니다. 이는 내에서만 을 허용하기 때문에 허용되지 않습니다. const처럼.

이 방법의 official documentation은 나에게도 의미가 없습니다. 이미지 뷰어를 만들고 싶다면 런타임에 다른 이미지를 QImage sourceImage에로드하고 어떻게해야합니까? 그것을 달성하는 const QImage?

이 문제는 고충을 자아 내고 있습니다. 게다가 Qt에있는 사람들이 왜 이런 방법을 사용하는지 철학적 인 이유에 대한 비전이 있다면 조금 비울 수 있습니까? const? 힙에 QImage를 할당 할 필요가 없습니다

(새 사용) :

+0

QImages 대신 QPixmaps를 사용하지 못하게하는 이유는 무엇입니까? – vahancho

+0

나는 또한 opencv와 함께 작업하고 있습니다. 즉,'cv :: Mat'을 constantly'QImage'로 변환해서 돌려 줄 것을 의미합니다. 'QPixmap'은 문서에 따라 디스플레이에 최적화되어 있습니다. 'QPixmap'을 cv :: Mat로 변환하는 방법이 있지만 QImage는 문제 공간을 완벽하게 채울 수 있다고 생각합니다. – timfeirg

답변

2

imageScene.addPixmap(QPixmap::fromImage(*sourceImage)); 

어떤 조언을 해보십시오. 사용 : 그냥 명확히

QPixmap::fromImage를 호출 할 때

QImage sourceImage; 

는 그런 다음 포인터 역 참조 할 필요가 없습니다 다음 const와 오류와는 아무 상관이있다.

+0

간단하고 고무적입니다. 나는 포인터에 대한 약간의 독서를하고 나의 C++ 지식을 업데이트했지만'sourceImage'는'const QImage'가 아닌'QImage' 타입을 가리키고 있기 때문에 묻지 않을 수 없습니다. QPixmap :: fromImage (const QImage)'는 여전히'* sourceImage'를 유효한 인수로 받아들입니까? – timfeirg

+0

제한은 한 가지 방법 일뿐입니다. 메서드에 const 매개 변수가있는 경우이 매개 변수는 전달한 내용을 변경하지 않을 것이라는 약속을 의미합니다. 그 반대의 경우 const 객체를 const가 아닌 매개 변수로 전달하면 '이것을 수정하겠다'라는 함수에 결코 수정해서는 안되는 것을 주겠다. – Bgie

+0

timfeirg 한 문제를 해결하는 동안 (함수에 대한 const 매개 변수가 해당 매개 변수를 변경하지 않는 함수에 의한 약속 일 뿐이라는 사실을 이해하지 못함), 그가 묻는 질문에 대답하지 않습니다. 왜 문서화 된 함수가 객체가 매개 변수로만 사용된다는 서명은 대신 객체에 대한 포인터를 매개 변수로 받아들입니까? 어떻게 컴파일합니까? 답변이 없습니다. 내 생각 엔 좀 마술 같아. –