2012-06-25 3 views
3

큰 이미지는 image.save(fichier)으로 저장해야합니다. 어떻게하면 저축 상태의 진행 표시 줄을 표시 할 수 있습니까?파일 저장 중 진행

답변

1

당신은 아마 저장 이미지에 내장 사용하지 않을 수 있습니다 ...

사소한 문제 일 수도 있지만 난 정말이 한 줄 명령의로이 일을 어떻게하지 않습니다. 저장 시간 (이미지의 크기를 알고 추측 mb/s)을 예상하고 진행률 표시 줄을 올려 타이머를 사용하여 업데이트 할 수 있습니다.

또는 진행률 표시 줄을 끝까지 빠르게 실행하고 다시 시작하여 일부 진행 상황을 표시하지만 실제 진행 상태는 표시하지 않을 수 있습니다.

편집 : 실제로 진행해야하는 경우 이미지 데이터를 메모리에 저장 한 다음 진행 상황을 업데이트 할 때 한 번에 디스크에 메모리를 쓸 수 있습니다. 메인 스레드가 expected_size/CURRENT_SIZE와 초마다 진행 값을 업데이트 진행 막대를 표시하면서

QImage image; 
QByteArray bytes; 
QBuffer buffer(&bytes); 
buffer.open(QIODevice::WriteOnly); 
image.save(&buffer, "PNG"); // writes image into buffer in PNG format 

그런 다음, 디스크

당신은 다른 스레드에서 QImage::save() 실행할 수 있습니다
+0

문제는 프로그램이 매우 다른 컴퓨터에서 실행되므로 추측을하지 않는 것이 좋습니다. 게다가 나는 이것을 구현할 수있는 방법을 아직 보지 못했습니다. 'image.save (fichier)'문이 실행되는 동안 어떻게하면 업데이트 할 수 있습니까? – Leo

+0

타이머 신호/슬롯은 저장 작업 중에도 계속 실행됩니다. 타이머는 멀티 태스킹을하는 저렴하고 쉬운 방법입니다. 또한 타이머 슬롯의 이미지 파일 크기를 확인할 수도 있지만 OS에 따라 저장 시작시 전체 크기가 할당 된 다음 채울 수 있습니다 –

1

에 버퍼를 작성합니다. QFile::size()

+0

이 솔루션과 관련하여 질문이 하나 있습니다. 어떻게 예상을 얻을 수 있습니까? 파일 크기? 내가 아는 전부는 픽셀 수이지만, 품질 요소가있는이 물체를 여러 가지 물체로 변환하는 방법을 모르겠습니다 ... – Leo