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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: connect сам на себя  (Прочитано 3964 раз)
Heggi
Гость
« : Май 22, 2015, 14:59 »

Пишу обертку для работы с OwnCloud, отнаследовал QNetworkAccessManager. Теперь хочу перехватывать сигнал finished, чтобы логику разборки ответа оставить внутри класса. Для этого делаю коннект сигнала finished на слот finish.
Оно работает так даже, но ИМХО это какой-то костыльный метод. Может есть более правильный вариант перехватить сигнал finished внутри класса?

Код:
class OwnCloud : public QNetworkAccessManager
{
    Q_OBJECT
public:
    OwnCloud();
public slots:
    void finish(QNetworkReply *reply);
};

OwnCloud::OwnCloud(): QNetworkAccessManager()
{
    QObject::connect(this,SIGNAL(finished(QNetworkReply*)),this,SLOT(finish(QNetworkReply*)));
}
Записан
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #1 : Май 22, 2015, 15:20 »

Это не костыльный метод, это вполне нормальная обработка события. Не понимаю, что вас смущает. Подписывать свой слот на свой же сигнал - это не костыль.
Записан
Heggi
Гость
« Ответ #2 : Май 22, 2015, 15:23 »

Именно это и смущает, что приходится подписывать самого на себя.

Но раз это нормально, то ладно...
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #3 : Май 22, 2015, 15:41 »

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

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Akon
Гость
« Ответ #4 : Май 29, 2015, 11:59 »

А нельзя ли QNetworkAccessManager сделать членом OwnCloud?
Записан
MaxoBik
Гость
« Ответ #5 : Май 31, 2015, 14:50 »

А нельзя ли QNetworkAccessManager сделать членом OwnCloud?

Что это принципиально изменит? Все равно придется подписываться на сигнал только уже к члену класса.
Если нет возможности добраться по иерархии классов до метода, который и вызывает сигнал переопределив его, то подписывания на сигнал это самый простой способ.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #6 : Июнь 01, 2015, 11:13 »

Код
C++ (Qt)
QObject::connect(this,SIGNAL(finished(QNetworkReply*)),this,SLOT(finish(QNetworkReply*)));
Можно проще записать
Код
C++ (Qt)
connect(this,SIGNAL(finished(QNetworkReply*)),SLOT(finish(QNetworkReply*)));
Записан
Akon
Гость
« Ответ #7 : Июнь 01, 2015, 20:44 »

Цитировать
Что это принципиально изменит?
Во-первых, снимется комплекс подписывания на собственные сигналы, а во-вторых (главное), это более правильно с архитектурной точки зрения, т.к. от открытого наследования в данном случае появляется ненужный (или даже неконсистентный) интерфейс.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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