2010-11-18 4 views
4

나는 Qt을 처음 사용하고 있습니다. VS2008 용 Qt를 설치하고 VS2010과 통합되었습니다. HTTP 요청을하는 법을 알고 싶습니다. 나는 QtNetwork에 대해 읽었지 만 QtHttp는 obselete입니다.Qt로 HTTP 요청하기

는 또한 약 libcurl에curlpp을 알고,하지만 난 문제를 설치, 그것은 Qt를 작업하고 있습니다.

당신은 무엇을 권장합니까

,QtNetwork 또는 curlpp? QtNetwork 인 경우 샘플 함수 또는 코드 조각 (및 사용할 클래스)을 제공해주십시오. curlpp (libcurl) 인 경우 Qt (또는 친절하게 설명)을 설치하는 단계를 어디에서 찾을 수 있습니까?

대단히 감사합니다.

답변

6

libcurl에curlpp 큰 라이브러리하지만이를 사용하는 것은 아마 당신이 피할 수있는 프로젝트에 대한 종속성을 추가합니다.

Qt의 최신 버전은 QNetworkAccessManager을 사용하여 네트워크 요청 (포함 된 http 요청)을 작성하고 응답을받는 것이 좋습니다.

파일을 다운로드하기위한 가장 간단한 방법은 다음과 같습니다

QNetworkAccessManager *manager = new QNetworkAccessManager(this); 
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*))); 
manager->get(QNetworkRequest(QUrl("http://stackoverflow.com"))); 

replyFinished 슬롯이 호출 될 때 QNetworkReply 객체가 다운로드 된 데이터가 포함됩니다 매개 변수뿐만 아니라 메타 데이터 (헤더로 소요, 기타.).

보다 완벽한 예제는 Qt 예제에서 찾을 수 있습니다. read here its source code.

5

주세페 잘, 당신은 libcurl에, curlpp와 유사한 라이브러리를 사용할 필요가 없습니다. 그럴 필요가 없습니다. Qt는 간단하고 작동하는 클래스를 소유하고 있습니다.

요청을 보내고 응답을 검색하는 표준 방법은 비동기입니다. 항상 매니저 완료 (QNetworkReply *) 신호를 슬롯에 연결해야합니다.

여러 요청을 보내고 각 답장에 슬롯을 추가하지 않으려는 경우 항상 이벤트 루프를 실행하고 관리자 신호를 이벤트 루프 quit() 슬롯에 연결할 수 있습니다. 이 같은

뭔가 : Btw는

QNetworkAccessManager *manager = new QNetworkAccessManager(this); 
QEventLoop *eventLoop = new QEventLoop(); 
QObject::connect(manager, SIGNAL(finished(QNetworkReply*)), eventLoop, SLOT(quit()); 

manager->get(QNetworkRequest(QUrl("http://stackoverflow.com"))); 
eventLoop->exec(QEventLoop::ExcludeUserInputEvents); 

QByteArray replyData = reply->readAll(); 
... //do what you want with the data your receive from reply 

. 뭐하고 있는지 몰라. 하지만 모바일 앱이라면 VS에서 QtCreator IDE로 전환하는 것이 좋습니다. 모바일 장치 테스트를위한 훌륭한 시뮬레이터와 완벽한 툴 체인을 갖추고 있습니다.