. qt

2012-12-14 1 views
1

주 창에 레이블을 만들었으며 크기는 200x300px로 설정되었습니다. 지금 버튼을 클릭하면 이미지를 볼 필요가 있습니다. 여기에 버튼의 슬롯 기능이 있습니다.. qt

void MainWindow::function1(){ 
QImage img; 
img.loadFromData("test.jpg"); 
img = img.scaled(200, 300, Qt::KeepAspectRatio, Qt::SmoothTransformation); 
label->setPixmap(QPixmap::fromImage(img)); 
} 

이 문제는 오류없이 컴파일되지만 이미지를 표시하지 않습니다. 버튼을 누르면 IDE에 QImage::scaled: Image is a null image이 표시됩니다. qt에 새로운 기능이 추가되었습니다. 나는 어떤 충고에 대해서도 매우 감사 할 것입니다. 당신이 QIODevice에서 읽어들이는 경우

답변

2

GUI 스레드 외부에서 이미지를 처리 ​​할 때는 QImage을 사용해야합니다. 또한 loadFromData() 함수는 파일 이름이 아닌 많은 바이트 배열을 전달하는 데 사용되는 것처럼 보입니다.

다음은 QPixmap을 사용하여 수행하는 방법입니다.

QPixmap pix; 

bool loaded = pix.load("test.jpg"); 

if(loaded == false) 
{ 
    label->setText("Failed to load test.jpg from" + QDir::currentPath()); 
} 
else 
{ 
    pix = pix.scaled(200, 300, Qt::KeepAspectRatio, Qt::SmoothTransformation); 
    label->setPixmap(pix); 
} 

는 또한 label->width()label->height() 200 및 300을 대체 할 수 있습니다. 이 방법으로 픽스맵을 스케일링하는 것이 가장 좋지만, 픽스맵을 설정 한 다음 label->setScaledContents(true)

+0

을 사용해도됩니다. 하지만'img.load ("test.jpg")'를 내 코드로 대체하면 작동하지 않습니다. 여기서 뭐하는 실수 야? –

+0

내가 파일을 찾지 못하거나 자동 감지되지 않는 형식이거나 QImage가없는 jpg 처리 용 DLL과 관련이 있다고 생각합니다. 이것을 배포 할 준비가되면 "QTDIR/plugins"에서 복사 한 "/imageformats/qjpeg4.dll"디렉토리의 exe 디렉토리에 있는지 확인해야합니다. 함수 호출에서 반환 값을 확인하면로드에 실패했거나 크기를 조정하지 못했는지 또는 다른 것 인 지 알 수 있습니다. 때때로 Qt는 런타임시에도 오류를 출력에 넣습니다. – phyatt

1

대신

img.loadFromData("test.jpg");

사용

img.load("test.jpg");

의 감사합니다.