Вопрос

Я новый Qt.. Отказ Я установил QT для VS2008 и интегрирован с моим Vs2010.. Отказ Я просто хочу знать, как сделать HTTP-запросы. Я прочитал о Qtnetwork. Но QTHTTP является окрестите.

Я также знаю о либерл а также Curlpp., но у меня есть проблемы, устанавливающие его, и делая его работать с Qt.

Что ты порекомендуешь, Qtnetwork. или Curlpp.? Если Qtnetwork., Можете ли вы дать мне образец функции или кусочка кода (и какой класс использовать). Если Curlpp (libcurl), не могли бы вы указать мне где-нибудь, где я могу найти шаги, чтобы установить его для Qt. (или пожалуйста, объясните)?

Спасибо большое.

Это было полезно?

Решение

либерл а также 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, вы можете Читайте здесь свой исходный код.

Другие советы

Джузеппе прав, вам не нужно использовать либерл, Curlpp. и подобные библиотеки. Нет необходимости в том, что QT имеет простой и рабочий класс на нем.

Имейте в виду, что стандартный способ отправки запроса и получение ответа является асинхронным. Вам всегда нужно подключить менеджер завершен (QNetworkreply *) сигнал в слот.

Если вы отправляете несколько запросов и не хотите добавлять слот для каждого ответа, вы всегда можете запустить цикл событий и подключить сигнал менеджеров к стенку событий Quit () слота.

Что-то вроде этого:

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. Он имеет хороший симулятор и полный инструментарий для тестирования мобильных устройств.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top