Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QNetworkReply finished()
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие
andry_ad
Есть конструктор класса:
....
manWord = new QNetworkAccessManager;
reqWord = new QNetworkRequest;
....
connect(manWord,SIGNAL(finished(QNetworkReply*)),this,SLOT(getWordTrans(QNetworkReply*)),Qt::DirectConnection);
....


Функция которая посылает запрос:
AdWordDes* AdGoogleTranslate::translateWord(QString inputWord, QString trFromLang, QString trToLang)
{

    isWordReady=false;

    reqWord->setUrl(QUrl(requestStringWord.arg(inputWord).arg(trFromLang).arg(trToLang)));

    manWord->get(*reqWord);

    tmpWord->w_word=inputWord;


    return tmpWord;

}



слот обробки QNetworkReply - signal finished():
void AdGoogleTranslate::getWordTrans(QNetworkReply *receiveWord)
{

    ....

    tmpWord->w_translation=tmpString;

    ....
}


Как сделать чтобы после вызова "manWord->get(*reqWord);" функция ждала исполнения слота обработки сигнала finished() (ето void AdGoogleTranslate::getWordTrans(QNetworkReply *receiveWord)) т.е. ждала выполнения запроса и возвращения ответа от сервера и только тогда возвращала результат - "return tmpWord;".

Мне нужно чтобы функция "translateWord" при заданные запроса возвращала результат как "return tmpWord;" и без использования слотов и сигналов.

Спасибо.
PAFOS
В классе объявляешь переменную типа bool (например m_reqFihished), которая будет хранить состояние выполнения запроса.

теперь такие махинации:

AdWordDes* AdGoogleTranslate::translateWord(QString inputWord, QString trFromLang, QString trToLang)
{

    isWordReady=false;

    reqWord->setUrl(QUrl(requestStringWord.arg(inputWord).arg(trFromLang).arg(trToLang)));

    m_reqFinished = false; // сбрасываем флаг перед выполнением запроса

    manWord->get(*reqWord);

    // пока флаг == false, обрабатываем все события
    while( !m_finished )
        qApp->processEvents();

    tmpWord->w_word=inputWord;


    return tmpWord;

}


В слоте обработки

void AdGoogleTranslate::getWordTrans(QNetworkReply *receiveWord)
{

    ....

    tmpWord->w_translation=tmpString;

    ....

    m_reqFinished = true; // Сигнализируем, что запрос выполнился
}

andry_ad
Сработало! я забыл об processEvents().
Хотел сделать так:
while(!isWordReady)
{
return tmpWord;
}

)))
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.