예를 들어 StackOverflow의 홈페이지와 같은 웹 페이지의 소스 (HTML)를 가져오고 싶습니다.Qt - 인터넷에서 호스팅되는 웹 페이지의 소스 (HTML 코드) 얻기
이것은 내가 지금까지 코딩 한 것입니다 :
QNetworkAccessManager manager;
QNetworkReply *response = manager.get(QNetworkRequest(QUrl(url)));
QString html = response->readAll(); // Source should be stored here
그러나 아무 반응이 없습니다! html
문자열의 값을 가져 오려고하면 문자열이 비어 있습니다 ("").
그럼, 어떻게해야합니까? Qt 5.3.1을 사용하고 있습니다.
등의
main
에 컨트롤러 클래스의 구성원으로QNetworkManager
인스턴스를 넣어, 또는한다 동기 인 것처럼 비동기 코드를 작성합니다. 그렇지 않습니다. 실제로 이벤트 루프를'exec()'하는 것을 잊지 않았다면,이 메소드를 재진입 할 가능성이있는'event.exec()'의 임의의 결과 나 다른 메소드에 대해 묻는 것이다. 대부분의 사람들은 그러한 합병증을 염두에두고 코드를 설계하지 않기 때문에 하드 드라이브를 포맷하거나 핵 공격을 시도 할 때 정의되지 않은 행동의 원인이라고 생각합니다. C++ 11 및 Qt 5의 도움으로 명시 적으로 비동기 코딩이 더 평화로운 대안입니다. –질문자가 동기식 코드로 HTML을 얻으려고 했으므로 그에게이 솔루션을 보여주었습니다. 때로는 그렇게하는 것이 더 쉽습니다. event.exec() 실수를 지적 해 주셔서 감사합니다. – MKAROL
예, 응용 프로그램에 정의되지 않은 동작을 도입하는 것은 쉽다는 것에 동의합니다. 그것이 당신이해야한다는 것을 의미하지는 않습니다. Qt는 Qt 4에서도 신호/슬롯 덕분에 비동기 코딩을 상대적으로 쉽게 만듭니다. C++ 11 및 Qt 5에서는 회전하는 로컬 이벤트 루프 및 이와 유사한 미루어 짐을 제안하는 것에는 전혀 변명의 여지가 없습니다. –