2014-04-04 3 views
2

Qt 5의 경우 QHttp is deprecated이고 모두 use QNetworkAccessManager now입니다. 벌금. 하지만 룰렛을하고있는 것처럼 느끼지 않고 멀티 홈 컴퓨터에서 요청 (HTTP 또는 기타)을하려면 어떻게해야합니까?Qt 바인딩에서 특정 인터페이스/IP에 네트워크 요청을하는 방법은 무엇입니까?

there is no way 인 경우 해결 방법은 무엇입니까? 내 구체적인 경우 지금은 HTTP를 통해 파일을 다운로드하기 만하면됩니다. QtNetwork를 사용하여 일반적인 방법으로 이것을 수행 할 수있는 방법이 있습니까?

+0

1 년 후 아직 해결되지 않았습니까 ?? – lpapp

답변

1

빠른 해결 방법은 여전히 ​​호환성을 위해 separate module에서 사용할 프로젝트 파일

QT += http 

이를 사용하는 것입니다.

+0

사실입니다. 그러나 문서에서 ... "새로운 코드에서 사용하는 것을 강력히 권합니다." 그래서 사람들이 이미 새로운 코드를 사용하고있는 솔루션을 기대하고있었습니다. – njahnke

+0

@njahnke : 나에게 대안을 제시하지 않으면 조언하는 내용이 중요하지 않습니다. 나는 지금까지 qthttp의 행복한 사용자 였지만 걱정하지는 않았다. 그렇다. 그것은 쓰여지는 것처럼 빠른 해결책 일 뿐이다. – lpapp

0

원하는 인터페이스가 별도의 물리적 (하드웨어) 인터페이스가 될 정도로 운이 좋은 경우, 예를 들면 다음과 같이 할 수 있습니다. (web_viewQWebView*이다)

QNetworkConfigurationManager config_manager; 
QList<QNetworkConfiguration> configs = config_manager.allConfigurations(); 
bool found_interface = false; 
QString desired_interface_name("eth1"); 
foreach (const QNetworkConfiguration &config, configs) { 
    if (config.name() == desired_interface_name) { 
     found_interface = true; 
     QNetworkAccessManager *network_access_manager = new QNetworkAccessManager; 
     network_access_manager->setConfiguration(config); 
     web_view->page()->setNetworkAccessManager(network_access_manager); 
     break; 
    } 
} 
if (!found_interface) { 
    //we failed to find the interface! 
} 

는 다시이 작동하지 않습니다는 IP (예컨대 eth1:1, eth1:2 등)을 하나의 물리적 인터페이스의 가상 인터페이스 부에 결합되는 경우. 나는 아직도 그 사건에 대한 해결책을 찾고있다.

+0

@njajnke QNetworkAccessManager를 성공적으로 바인딩 할 수 있습니까? 나는 비슷한 코드를 몇 번이나 테스트했지만 multi-homed 시스템 (eth0, eth1)에서 작동하지 않았다. 요청은 항상 기본 gw를 통해 라우팅되었다. – sergico