2014-09-03 3 views
0

디렉토리에서 모든 이미지를 차례대로 표시하는 방법 QT Creator에서 GUI 응용 프로그램을 만들려고합니다. 선택한 디렉토리 (슬라이드 쇼의 일종)에서 모든 이미지를 표시하고 싶습니다. QDir, QStringlist, QFileDialog를 읽습니다. 클래스 참조하지만 그것은 doen't work.it 폴더의 마지막 이미지 만 보여줍니다.qt에서 opencv

for(int i=0;i<10;i++) 
{ 

    QImage image2(directory+"/"+fileList[i]); 
    ui->label_pic2->setPixmap(QPixmap::fromImage(image2)); 
    //Sleep(550); 
} 

수면 기능은 천천히로드되어 서로를 표시하지 않습니다.

+3

Qt는 이벤트 기반입니다. 가장 간단한 방법은 QTimer를 사용하는 것입니다. 절대로 주 스레드를 차단하지 마십시오. – hyde

+0

@hyde QTimer는 수면과 비슷하게 작동합니다. 차이점은 없습니다. 마지막 이미지는 지연 5 초 등을로드합니다. 화면 슬라이드 쇼에서 보려는 경우입니다. – Anivia

+3

* "차이는 없습니다."* - 이는 기술적 인 문제가 있으며 누군가가 해결책의 방향을 알려주고 있다고 생각하면 다소 권위있는 진술입니다. 도움이되었습니다. QTimer와 sleep을 사용하는 것의 차이점은 무엇입니까? * – HostileFork

답변

2

먼저 코드가 실행되지 않고 응용 프로그램이 수신 events을 처리 할 수있는 경우에만 GUI를 업데이트해야합니다. 끝이없는 원을 만들면 GUI가 업데이트되지 않습니다. GUI를 업데이트하지 않기 때문에 마지막 이미지 만 볼 수 있습니다.

응용 프로그램이 들어오는 이벤트를 처리하도록 할 수 있습니다 (QCoreApplication::processEvents()). 이 경우 이미지가 빠르게 깜박일 것입니다. 그러나 각 이미지를 보여준 후에는 일시 중지해야합니다. 그리고 Sleep이 아마도 거기에서 작동 할 것이지만 일시 중지 중에는 응용 프로그램이 이벤트를 처리 할 수 ​​없게 정지됩니다.

그런 이유로 QTimer을 사용하시기 바랍니다. 일정 시간 동안 슬롯을 호출합니다. 다른 모든 시간에 응용 프로그램은 메시지를 처리하고 GUI를 업데이트합니다. 슬롯이 호출되면 label을 전환하여 다음 이미지를 표시 할 수 있습니다. 그리고 이것은 정확히 당신이 필요로하는 것입니다.

요약 :
1. QTimer을 만들고 간격을 설정하고 슬롯에 연결하여 타이머를 시작하십시오.
2. 슬롯 구현에서 목록의 다음 이미지를 읽고 label에 할당합니다.

: 어떤 이미지가 표시되는지 추적하려면 정수 변수를 만듭니다. 애니메이션을 시작할 때 0으로 설정하고 슬롯에서 늘리십시오.