Название: QT 4.6.0 QNetworkAccessManager - сигнал finished() Отправлено: jjoss от Январь 13, 2010, 16:23 Суть проблемы в следующем.
Есть класс "A" - наследник QObject. В качестве private-члена у него есть Код: private: В конструкторе класса соединятся сигнал finished(QNetworkReply *) со слотом для обработки следующим образом Код: ... Код: manager.get(QNetworkRequest(url)); Название: Re: QT 4.6.0 QNetworkAccessManager - сигнал finished() Отправлено: ecspertiza от Январь 13, 2010, 16:49 Накидай минимальный компилируемый пример
Название: Re: QT 4.6.0 QNetworkAccessManager - сигнал finished() Отправлено: jjoss от Январь 13, 2010, 17:20 Накидай минимальный компилируемый пример Прошу извинить за отсутствие всякого стиля :) - только в качестве примера. Модуль A (aa.h) Код: #ifndef AA_H Код: #include "aa.h" b.h Код: #ifndef B_H Код: #include "b.h" Код: #include <QtGui/QApplication> Название: Re: QT 4.6.0 QNetworkAccessManager - сигнал finished() Отправлено: zenden от Январь 13, 2010, 17:36 У меня печатает "OK"
Возникло подозрение, а не уничтожается ли экземпляр одного из классов (A, B) до того, как этот сигнал будет выслан. Как вижу, здесь вы используете их в стеке, возможно и в вашей программе так? Название: Re: QT 4.6.0 QNetworkAccessManager - сигнал finished() Отправлено: ecspertiza от Январь 13, 2010, 17:38 Хм... собрал твой пример ,все работает хорошо На экран выводится "Ok" что говорит о том что слот выполнен.
На всякий случай прилагаю архив. Название: Re: QT 4.6.0 QNetworkAccessManager - сигнал finished() Отправлено: jjoss от Январь 13, 2010, 17:43 Странно... Ну, все равно, спасибо!
Полезу в код. Дело в том, что пример и у меня сработал корректно. А вот в проекте - нет. Но там есть одно НО! Реквест выполняется модальной формой. Так вот, если её не заставлять ждать результат - то всё срабатывает, а если заставлять - типа while(proccessing) { //дисэйблить форму } то нет.... Есть подозрение, что когда дисэйблю - цикл обработки не работает, хотя не уверен... Название: Re: QT 4.6.0 QNetworkAccessManager - сигнал finished() Отправлено: ecspertiza от Январь 13, 2010, 17:45 Не знаю может я не так понял, но попробуй форму задизейблить так
qApp->processEvents(QEventLoop::ExcludeUserInputEvents); Название: Re: QT 4.6.0 QNetworkAccessManager - сигнал finished() Отправлено: jjoss от Январь 13, 2010, 17:50 Не знаю может я не так понял, но попробуй форму задизейблить так qApp->processEvents(QEventLoop::ExcludeUserInputEvents); Йо!!! Спасибо огромное!!! Все корректно теперь. Название: Re: QT 4.6.0 QNetworkAccessManager - сигнал finished() Отправлено: jjoss от Январь 13, 2010, 17:59 Ещё раз, спасибо!!!
Тему можно закрывать. |