Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2011, 17:08   #1
Dayman
Форумчанин
 
Аватар для Dayman
 
Регистрация: 12.01.2011
Сообщений: 186
По умолчанию [QT] Проблема с сигналами/слотами.

Заранее извиняюсь за плохое название темы, но в одну строку уместить проблему не получилось.

Ситуация такая:
Есть два класса (скажем Core и Api), оба являются синглтонами, но это не суть важно.
Есть список из неких объектов objs, каждый из которых имеет свой token (aka данные авторизации).
Core вызывает api->GetObject(Token* token);
В GetObject создается QNetworkAccessManager, собираются QNetworkRequest и header и делается пост запрос.
QNetworkManager::finished(QNetworkR eply*) подключен к сигналу Api::ObjectFinished(QNetworkReply*) , к которому подключен слот в Core.
Так вот, мне нужно, чтобы на выходном сигнале помимо QNetworkReply* был еще и Token*, который был передан в GetObject.
Вся эта бадяга происходит асинхронно. objs дал для примера, на деле будет примерно следующее:
objs1 - GetObject1 - Object1Finished
objs2 - GetObject2 - Object2Finished
То есть типов объектов несколько, каждый имеет Token*, некоторые еще имеют ID, в последнем случае его тоже надо иметь на выходе.

TL;DR: нужен некий traceback, чтобы core мог уследить, к какому объекту относиться полученная информация.
У самого идея пока только одна:
сабклассить QNetworkAccessManager, в GetObject пихать нужные данные в свежесозданный QNetworkAccessManager; на выходе вызывать QNetworkReply::manager(), дальше понятно.
Как вариант вместо Token* на выходе можно было бы иметь и void* на obj.

P.S. Придумал и второй вариант: в api сделать QHash<void*,QNetworkAccessManager*> .
Lingua c++ non penis caninus est.

Последний раз редактировалось Dayman; 26.04.2011 в 17:19.
Dayman вне форума Ответить с цитированием
Старый 28.04.2011, 04:14   #2
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

sender() не поможет?
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 28.04.2011, 18:51   #3
Dayman
Форумчанин
 
Аватар для Dayman
 
Регистрация: 12.01.2011
Сообщений: 186
По умолчанию

Не поможет.
sender вернет указатель на Api.
Пока сделал наследованием от QNetworkAccessManager, добавив в класс void указатель. Работает.
Lingua c++ non penis caninus est.
Dayman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37