2013-01-31 2 views
0

가능한 중복을 시뮬레이션 :
Coding progress bar advice는 진행률 표시 줄 실행 시간을

나는 인코딩 및 일반 텍스트 파일 (압축 및 압축 해제) 디코딩 할 수 C에서 응용 프로그램을 ++ 썼다. 이제 Qt를 사용하여 GUI를 만들고 Winrar 또는 일반 설정 응용 프로그램과 비슷한 사용자가 압축을 실행할 때 압축 진행 상태를 보여주는 진행률 막대를 추가하려고합니다. 현재 실행 시간/총 실행 시간의 백분율을 나타내는 진행 막대를 만들 수 있습니까? 또는 다운로드 상태를 보여주는 진행률 막대와 비슷한 결과를 낼 수 있습니까? 그러한 진행 막대를 만드는 일반적인 접근법은 무엇입니까?

+0

귀하의 질문은 [너무 일반적입니다] (http://stackoverflow.com/faq#dontask)입니다. 당신의 생각은 무엇입니까? 너 뭐 해봤 니? 보여줄 코드가 있습니까? – Tony

+0

그 밖의 많은 질문이 있으니 태그를 찾으려면 대괄호로 묶어서 "[qt] progress"로 검색하십시오. – Tony

+0

약간의 시간이 걸리면 QProgressDialog를 표시하고 범위를 0에서 0으로 설정할 수 있습니다. 그러면 왼쪽과 오른쪽으로 튀어 나와 '유휴'진행률 막대가 나타납니다. – Zaiborg

답변

0

일반적으로 다른 스레드가 UI를 최신 상태로 유지하면서 작업을 수행하는 스레드가있는 것이 일반적입니다.

그런 다음 UI를 업데이트하는 스레드가 수행되는 작업의 백분율을 이해하는 데 사용하는 메커니즘 (가장 간단한 형식의 전역 변수)을 정의해야합니다. 그런 다음 적절한 위젯을 그릴 수 있습니다.

일반적으로 (적어도) 두 개의 스레드를 사용하면 그 공유 변수 이상이 필요합니다. UI를 업데이트하는 스레드는 진행중인 작업, 사용 가능한 새로운 정보, 수행중인 작업 등을 완전히 이해할 수 있어야합니다. 다른 스레드은 실제로 유용한 작업을 수행하고 있습니다. UI 스레드는 프로그램의 상태를 관찰하여 사용자를 위해 뭔가를 그립니다.

작업을 수행하는 스레드는 진행 상황을 예측할 수 있어야합니다. 귀하의 경우, 예를 들어 number_of_bytes_decoded/total_file_size. 때로는 진행 상황을 예측할 수 없으므로 진행 상황을 "플래시"로 업데이트하여 진행 상황을 보여 주지만 백분율을 제공 할 수는 없습니다. 이것은 예를 들어 진행 막대 내부에서 무언가가 좌우로 움직이는 것을 볼 때 발생합니다.