Russian Qt Forum

Qt => Работа с сетью => Тема начата: desdichado1990 от Май 14, 2017, 17:51



Название: QEventLoop запускается два раза
Отправлено: desdichado1990 от Май 14, 2017, 17:51
Имеется такая функция.
.h
Код:
    
    private:
    QNetworkAccessManager manager;
    QEventLoop event;
    QNetworkReply *response;

.cpp
Код:
QByteArray products::get_response(QString script)
{
    response = manager.get(QNetworkRequest(QUrl("http://"+address_server+"/"+script)));
    connect(response,SIGNAL(finished()),&event,SLOT(quit()));
    event.exec();
    return response->readAll();

}

Использую её по сигналу currentItemChanged() у QTableWidget.

При быстром нажатии на строки таблицы в консоль выходит сообщение:
QEventLoop::exec: instance 0x19d6ddd4 has already called exec()
И данные не приходят.

Подскажите в какую сторону смотреть в данном вопросе.


Название: Re: QEventLoop запускается два раза
Отправлено: Пантер от Май 15, 2017, 10:18
Создай ивентлуп в методе get_response, а не держи его членом класса.
Но вообще, подход твой неверен, нужно работать асинхронно через сигналы/слоты.


Название: Re: QEventLoop запускается два раза
Отправлено: desdichado1990 от Май 15, 2017, 13:26
Хм... ну да логично:)
У меня проблема с асинхронной работой. Под Windows работает, под Android молчит сигнал.
Кода не осталось, с которым была такая проблема.
Если напишешь рабочий пример, исправлюсь..)


Название: Re: QEventLoop запускается два раза
Отправлено: Пантер от Май 16, 2017, 08:47
Готовый примеров куча на данном форуме. Если найдешь нерабочий пример, выкладывай, посмотрим.