crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QNetworkReply finished()
andry_ad
  опции профиля:
сообщение 25.4.2011, 22:10
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 25.4.2011
Пользователь №: 2631

Спасибо сказали: 0 раз(а)




Репутация:   0  


Есть конструктор класса:
....
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
  опции профиля:
сообщение 26.4.2011, 8:09
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 258
Регистрация: 27.12.2010
Из: Дмитров
Пользователь №: 2309

Спасибо сказали: 29 раз(а)




Репутация:   8  


В классе объявляешь переменную типа 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
  опции профиля:
сообщение 26.4.2011, 9:37
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 25.4.2011
Пользователь №: 2631

Спасибо сказали: 0 раз(а)




Репутация:   0  


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

)))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 3.12.2020, 14:04