2014-05-13 7 views
0

내가 현재 정력 같은 입력 바있다 Qt를 가진 브라우저를 개발하고 있어요/자신의 입력 위젯 authenticationRequired 그 안에는 QLabel이 들어 있습니다.는 :: 비동기

이제 HTTP 인증을 처리하고 싶습니다. 다른 프로젝트에서 볼 수있는 일반적인 사항은 모달 QDialog을 연 다음 authenticationRequired signal에 연결된 슬롯 안에 exec()을 호출하는 것입니다.

이제 상태 표시 줄을 사용하여 사용자에게 인증 정보를 묻습니다. 즉, 프롬프트를 표시하고 QLineEdit을 사용하여 정보를 입력하십시오.

내 문제는 authenticationRequired 슬롯 블록입니다. 단순히 메인 루프에서 계속 실행하고 사용자가 완료 될 때 추가 된 인증 정보로 요청을 계속할 수 없습니다. 사용자로부터 응답이 아직 없지만 QCoreApplication::processEvents를 호출하는 동안 상태 표시 줄에서 값을 얻는 몇 가지 기능을 구현

  • :

    나는 약 2 솔루션을 생각했습니다. 그러나 이것이 좋은 생각인지, 그리고 실제 이벤트 루프로 돌아갈 때까지 응용 프로그램이 많은 CPU를 소비하는지 잘 모르겠습니다.

  • 요청을 저장하고 중단하고 사용자에게 인증을 요청한 다음 인증 정보가 추가되는 즉시 요청을 다시 만듭니다. 하지만 단순히 QNetworkReply을 복제 한 다음 원래 회신에서 abort()으로 전화를 걸어 나중에 다시 시작할 수는없는 것 같습니다.

것은 QDialog::exec()is implemented는 그들이 통과 QEventLoop::DialogExec의 문서화되지 않은 값으로 새로운 QEventLoop을 만들 것 방법을 찾고있다. 동일한 작업을 수행 할 수 있을지 궁금하지만 일단 사용자 입력이 끝나면 이벤트 루프를 종료하는 방법을 모르겠습니다.

어떤 아이디어가 가장 정상적인 것 같습니까?

답변

1

문서화되지 않은 특별한 값없이 QEventLoop을 사용할 수 있습니다. 대신 당신은 같은 것을해야합니다 :

QEventLoop loop; 
connect(editBox, SIGNAL(finishedEditing()), &loop, SLOT(quit())); 
loop.exec(); 

을 그리고 그

(processEvents만큼 CPU를 독차지하지 않고) 블록, 귀하의 의견을 기다리고있는 새로운 이벤트 루프를 시작합니다