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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QNetworkAccessManager. Правильно организовать работу с сетью.  (Прочитано 3349 раз)
SimpleSunny
Гость
« : Сентябрь 22, 2009, 13:39 »

Есть программа, которая посылает на сервер различные (GET, HEAD, POST) запросы и в зависимости от ответа сервера выполняет те или иные действия на сервере.
Сейчас работа организована как-то так:
Код
C++ (Qt)
enum TypeRequest{Req1, Req2, Req3};
TypeRequest typeRequest;
 
void finished(QNetworkReply *reply)
{
switch (typeRequest)
{
case Req1 : do1(reply);
break;
case Req2 : do2(reply);
break;
case Req3 : do3(reply);
break;
}
}
 

Есть ли более изящные методы организации работы?
Записан
BRE
Гость
« Ответ #1 : Сентябрь 22, 2009, 15:08 »

Как вариант.
Код
C++ (Qt)
class BaseRequest : public QObject
{
Q_OBJECT
public:
BaseRequest( QNetworkAccessManager *manager, QObject *parent = 0 );
 
// Запустить запрос
bool start()
{
m_reply = build();
if( !m_reply )
return false;
connect( m_reply, SIGNAL( finished() ), SLOT( slotFinished() ) );
return true;
}
 
protected:
// Создать и выполнить запрос, вернуть объект reply
virtual QNetworkReply *build() = 0;
// Обработать ответ
virtual void processReply( QNetworkReply *reply ) = 0;
 
protected slots:
void slotFinished()
{
processReply( m_reply );
}
 
protected:
QNetworkAccessManager *m_manager;
QNetworkReply *m_reply;
};
 
class Req1 : public BaseRequest
{
Q_OBJECT
protected:
QNetworkReply *build()
{
return m_manager->get( ... );
}
 
void processReply( QNetworkReply *reply )
{
// Обработали запрос
}
};
 
class Req2 : public BaseRequest
{
...
};
 
Для запуска запроса, нужно создать объект соответсвующего класса, настроить его и запустить start(). Когда будет получен ответ, сам объект запроса обработает его и если нужно разрушит (например вызвав deleteLater).
Записан
SimpleSunny
Гость
« Ответ #2 : Сентябрь 24, 2009, 00:43 »

СПасибо. БУду вникать.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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