Russian Qt Forum
Апрель 19, 2024, 01:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QEventLoop запускается два раза  (Прочитано 8297 раз)
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()
И данные не приходят.

Подскажите в какую сторону смотреть в данном вопросе.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Май 15, 2017, 10:18 »

Создай ивентлуп в методе get_response, а не держи его членом класса.
Но вообще, подход твой неверен, нужно работать асинхронно через сигналы/слоты.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
desdichado1990
Гость
« Ответ #2 : Май 15, 2017, 13:26 »

Хм... ну да логично:)
У меня проблема с асинхронной работой. Под Windows работает, под Android молчит сигнал.
Кода не осталось, с которым была такая проблема.
Если напишешь рабочий пример, исправлюсь..)
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Май 16, 2017, 08:47 »

Готовый примеров куча на данном форуме. Если найдешь нерабочий пример, выкладывай, посмотрим.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.049 секунд. Запросов: 22.