2014-04-04 51 views
2

因此截至Qt 5,QHttp is deprecated,我們都應該use QNetworkAccessManager now。精細。但是,如何從我的多宿主機器發出請求(HTTP或其他),而不會感覺我正在玩輪盤賭?如何在Qt綁定到特定的接口/ IP時發出網絡請求?

如果there is no way,那麼什麼是解決方法?對於我現在的具體情況,我只需要通過HTTP下載文件。但是真的沒有辦法用QtNetwork以通用的方式做到這一點嗎?

+0

這是一年後還沒有解決? – lpapp

回答

1

快速的解決方法是在你的項目文件

QT += http 

使用這個它仍處於separate module兼容性可用。

+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:1eth1:2等)。我仍然在爲這種情況尋找解決方案。

+0

@njajnke你能成功地綁定QNetworkAccessManager嗎?我前幾次測試過一個類似的代碼,但它在多宿主系統(即eth0,eth1)上不適用於我,請求總是通過默認gw路由 – sergico

相關問題