Привет.
Использую Qt3 - v3.3.8
Приложение скачивает графический файл в QBuffer.
Отображает его на экране.
Пауза
и всё повторяется.
Так должно быть, но что-то оно всего лишь несколько раз повторяется.
Не могу разобраться в причинах.
Посмотрите пожалуйста код.
Бывает раза 3 пройдёт и висит на QHttp::Connecting,
а бывает и раз 15...
Перепробовал уже кучу вариантов:
- делал в httpDone() emit сигнала который обрабатывает полученные данные и отображает в QLabel
- заменял httpDone на requestFinished с использование id запроса
- с closeConnection() и без
- с ручной установкой headers (чтобы убрать keep-alive) и по умолчанию
- с созданием для каждого get своего буфера с помещением в map и извлечению нужного по requestFinished по id
- без обработки полученных данных даже
ничего не помогает....
как же правильно то?
вот моя реализация (одна из)
class MyWidget
: public QWidget
{
Q_OBJECT
QLabel * pLabel;
QHttp _http;
QTimer _timer;
public:
MyWidget(QWidget * parent = 0, const char * name = "MyWidget")
: QWidget(parent, name)
, _timer(this)
, _http(this)
{
QHBoxLayout * layout = new QHBoxLayout(this);
pLabel = new QLabel(this);
layout->addWidget(pLabel);
connect(&_timer, SIGNAL(timeout()), SLOT(timeout()));
connect(&_http, SIGNAL(done(bool)), SLOT(httpDone(bool)));
timeout();
}
void setTimer()
{
_timer.start(10000, TRUE);
}
public slots:
void timeout()
{
QUrl _image_url("http://ads1.msn.com/ads/1/0000000001_000000000000000301318.jpg");
_http.setHost(_image_url.host());
_http.get(_image_url.path());
_http.closeConnection();
}
void httpDone(bool error)
{
if (!error) //этот блок необязательный - баг проявляется и без него
{
QByteArray ba = _http.readAll();
QImage img;
img.loadFromData(ba);
QPixmap p;
p.convertFromImage(img);
pLabel->setPixmap(p);
}
setTimer();
}
};
PS: добавил код в пост - потому что вижу что аттачмент виден только залогиненым пользователям