По состоянию на Qt 5 QHttp устарела и мы все должны используйте QNetworkAccessManager сейчас. Хорошо. Но как мне сделать запрос (HTTP или иным образом) с моего многосетевого компьютера, не чувствуя, что я играю в рулетку?
Если выхода нет, тогда что такое обходной путь? Для моего конкретного случая сейчас мне просто нужно скачать файл через HTTP. Но неужели нет способа сделать это в общем виде с QtNetwork?
Быстрый обходной путь будет использовать это в вашем файле проекта
QT += http
Это все еще доступно в отдельный модуль для совместимости.
Если вам повезло, что требуемый интерфейс является отдельным физическим (аппаратным) интерфейсом, вы можете сделать, например, (web_view
это QWebView*
):
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
, так далее). Я все еще ищу решение для этого случая.