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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Перенести сокет в другой объект  (Прочитано 4084 раз)
markie
Гость
« : Август 07, 2013, 20:59 »

Всем привет! Хочу перенести сокет в другой объект. Делаю следующее:
Код:
_socket->disconnect(SIGNAL(readyRead()));
SaveAction *saveAction = new SaveAction(_socket->socketDescriptor());

В конструкторе SaveAction:
Код:
_socket = new QTcpSocket(this);
if (!_socket->setSocketDescriptor(socketDescriptor))
    _logger->addEntry(_socket->errorString(), true);
connect(_socket, SIGNAL(readyRead()), SLOT(reading()));

В итоге, в объекте SaveAction можно записывать данные в сокет, но вот считывать не получается. Не подскажете, как можно реализовать подобное?
Записан
mutineer
Гость
« Ответ #1 : Август 08, 2013, 10:15 »

Почему не получается? Сигнал не приходит?
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #2 : Август 08, 2013, 10:26 »

Код:
connect(_socket, SIGNAL(readyRead()),this,SLOT(reading()));

Укажите явно приёмника this. Поидее должно работать. Кстати посмотрите в лог консоли, не ругается ли на то что сокет находится в другом потоке (как вариант).
Записан
mutineer
Гость
« Ответ #3 : Август 08, 2013, 10:31 »

А что изменится если this явно указать?
Записан
markie
Гость
« Ответ #4 : Август 08, 2013, 11:46 »

Да, не проходит сигнал. И вообще, если убрать в первом куске кода строчку с disconnect, то отрабатывает сигнал в объекте, из которого я пытаюсь перенести сокет. Может, нужно ещё какую-нибуь ф-цию вызвать, помимо disconnect'a? (только чтобы соеинение не разорвалось)
Записан
mutineer
Гость
« Ответ #5 : Август 08, 2013, 11:49 »

А зачем вообще "переносить" сокет? может его просто перепривязать к другим слотам?

Дело скорее всего в этом:
Цитировать
Note: It is not possible to initialize two abstract sockets with the same native socket descriptor.
Записан
markie
Гость
« Ответ #6 : Август 08, 2013, 13:09 »

Да, вы правы, придётся не переносить в другой объект, а делать всё в текущем.
Спасибо, что помогли разобраться в проблеме.
Записан
mutineer
Гость
« Ответ #7 : Август 08, 2013, 14:12 »

Ну или передевай в объект не дескриптор сокета, а указатель
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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