Russian Qt Forum

Qt => Общие вопросы => Тема начата: xintrea от Июль 07, 2016, 16:42



Название: Вызовется ли слот, если указатель на объект изменили после connect() ?
Отправлено: xintrea от Июль 07, 2016, 16:42
Есть у меня виджет, в котором при нажатии кнопки cancel испускается сингнал cancelDownload. Он связывается с указателем на объект QNetworkReply *networkReply;

Код:
  networkReply=webManager.get(request);
  connect( this, SIGNAL(cancelDownload()), networkReply, SLOT(abort()) );

В процессе работы может оказаться ситуация, что вместо данных придет редирект, и заново выполнится код с новым запросом:

Код:
networkReply=webManager.get(request);

в результате, указатель networkReply изменится. А он же ранее был связан со слотом через connect().

Вопрос. Нужно ли пересоздавать connect() сигнала-слота в такой ситуации? То есть, во внутренностях Qt напрямую используется значение указателя, или значение указателя копируется в какую-то таблицу в момент connect()?


Название: Re: Вызовется ли слот, если указатель на объект изменили после connect() ?
Отправлено: Old от Июль 07, 2016, 16:48
Нууу, батенька! Вы не знаете основ языка. :(
Указатель всего лишь указывает на объект (содержит адрес объекта в памяти).
connect связывает сигнал одного объекта, со слотом (сигналом) другого объекта (или того же). Если вы создали новый объект, не важно что хранится в указатели, коннект сам не выполниться, его нужно будет делать для нового объекта.


Название: Re: Вызовется ли слот, если указатель на объект изменили после connect() ?
Отправлено: Bepec от Июль 07, 2016, 17:44
Соединяется Объект с Объектом.
Указатель - указывает на Объект.
Поэтому ответ на ваш вопрос - Объект будет уже другой, поэтому его надо снова связывать.