Russian Qt Forum

Qt => Работа с сетью => Тема начата: QCasper от Октябрь 22, 2010, 12:51



Название: Как получить состояние при работе с QNetworkAccessManager
Отправлено: QCasper от Октябрь 22, 2010, 12:51
В QHttp есть замечательный сигнал stateChanged, который сообщает о текущем состоянии запроса. Как получить нечто подобное, используя QNetworkAccessManager и QNetworkReply (ну или используя дополнительные классы, связанные с этими двумя)?


Название: Re: Как получить состояние при работе с QNetworkAccessManager
Отправлено: sendevent от Октябрь 22, 2010, 13:22
см. сигналы:
QNetworkReply (http://doc.qt.nokia.com/4.7-snapshot/qnetworkreply.html#downloadProgress)
QNetworkAccessManager (http://doc.qt.nokia.com/4.7-snapshot/qnetworkaccessmanager.html#authenticationRequired)
и, если нужны только хттп(с), можно глянуть на модуль QtWebKit.

upd: глянул на stateChanged - поторопился, не совсем то... можно сэмулировать "нечто подобное" (сендин/ридин/иррор), но всякие хостлукап/коннектин - видимо, нет.


Название: Re: Как получить состояние при работе с QNetworkAccessManager
Отправлено: BRE от Октябрь 22, 2010, 13:47
но всякие хостлукап/коннектин - видимо, нет.
SocketState QAbstractSocket::state () const
Цитировать
QAbstractSocket::UnconnectedState   0   The socket is not connected.
QAbstractSocket::HostLookupState   1   The socket is performing a host name lookup.
QAbstractSocket::ConnectingState   2   The socket has started establishing a connection.
QAbstractSocket::ConnectedState   3   A connection is established.
QAbstractSocket::BoundState   4   The socket is bound to an address and port (for servers).
QAbstractSocket::ClosingState   6   The socket is about to close (data may still be waiting to be written).
QAbstractSocket::ListeningState   5   For internal use only.


Название: Re: Как получить состояние при работе с QNetworkAccessManager
Отправлено: QCasper от Октябрь 22, 2010, 15:45
BRE, а можно короткий пример кода, как с участием QNetworkAccessManager получить хостлукап?


Название: Re: Как получить состояние при работе с QNetworkAccessManager
Отправлено: BRE от Октябрь 22, 2010, 17:10
BRE, а можно короткий пример кода, как с участием QNetworkAccessManager получить хостлукап?
Нет.  :)
Потому, что я полез смотреть как получить хоть какую-то ссылку на рабочий сокет и пока ничего не нашел.  :)


Название: Re: Как получить состояние при работе с QNetworkAccessManager
Отправлено: QCasper от Октябрь 23, 2010, 13:59
Нет.  :)
Потому, что я полез смотреть как получить хоть какую-то ссылку на рабочий сокет и пока ничего не нашел.  :)

Было бы всё так просто, я бы эту тему не создавал ;)


Название: Re: Как получить состояние при работе с QNetworkAccessManager
Отправлено: GNU Dimarik от Октябрь 24, 2010, 17:54
Не пойму вашей любви к QNetworkAccessManager.А что если придется использовать KeepAlive?
Что тогда делать будешь?
Имхо пиши на сокетах,QNetworkAccessManager это черный ящик для быстрого решения проблемы без лишних сложностей,но в обмен ты платишь тем,что не можешь контролировать ситуацию.


Название: Re: Как получить состояние при работе с QNetworkAccessManager
Отправлено: ufna от Октябрь 25, 2010, 09:56
чорт, да вся Qt это чорный ящик, я ж не могу контролировать машинный код! ((((


Название: Re: Как получить состояние при работе с QNetworkAccessManager
Отправлено: sne от Октябрь 25, 2010, 15:52
Немножко офф-топика, если позволите.

QHttp нонче имеет статус депрекэйтед, в то же время я не нашел как в QNetworkAccessManager использовать не дефолтный ip системы.
Т.е. есть сервер с 100+ ip адрессами, на них свои домены, необходимо с них (с ip) отсылать HTTP запросы. Раньше можно было забиндить ip для QTcpSocket и назначить его QHttp.

Подводя итог, мя негодует. Как можно объявлять классы устаревшими, когда замены им нет!?


Название: Re: Как получить состояние при работе с QNetworkAccessManager
Отправлено: QCasper от Октябрь 26, 2010, 16:33
Не пойму вашей любви к QNetworkAccessManager.А что если придется использовать KeepAlive?
Что тогда делать будешь?

Запью с горя.
Это не столько любовь, сколько следование советам разработчиков библиотеки - им виднее, чем мне.

Имхо пиши на сокетах,QNetworkAccessManager это черный ящик для быстрого решения проблемы без лишних сложностей,но в обмен ты платишь тем,что не можешь контролировать ситуацию.

Вот представь, мне нужно по http грузить данные и показывать, а статус нужен только для того, чтобы отображать его в строке состояния.
И зачем я буду реализовывать весь http самостоятельно?


Название: Re: Как получить состояние при работе с QNetworkAccessManager
Отправлено: voral от Декабрь 08, 2010, 11:27
Вот представь, мне нужно по http грузить данные и показывать, а статус нужен только для того, чтобы отображать его в строке состояния.
И зачем я буду реализовывать весь http самостоятельно?
Так и не надо. Может у меня ассистент другой ;) но:
Цитировать
QNetworkReply * QNetworkAccessManager::get ( const QNetworkRequest & request )
В свою очередь QNetworkReply имеет сигналы:
Цитировать
void   downloadProgress ( qint64 bytesReceived, qint64 bytesTotal )
void   error ( QNetworkReply::NetworkError code )
void   uploadProgress ( qint64 bytesSent, qint64 bytesTotal )
Из описалова:
Цитировать
This signal is suitable to connecting to QProgressBar::setValue() to update the QProgressBar that provides user feedback.