Название: Model/View: как лучше работать с списком QTcpSocket в классе модели? Отправлено: asterix39rus от Март 27, 2012, 00:01 Всем доброго времени суток!
Имеется модель: Код имеется сторонний класс: Код в котором есть обработчики сокетов: Код
и Код
И вот в чём вопрос, в sNewConnection() я создаю запись в модели (кидаю в неё Descriptor), а вот как мне теперь лучше обновить запись в модели в sReadClient()? По сути единственная привязка - Descriptor сокета в sReadClient(), получается нужно по Descriptor выбрать определённую запись в модели и вернуть нужный экземпляр QTcpSocket*? Правильно ли это? Можно как-то упростить? Кто-то уже решал подобные задачи? Название: Re: Model/View: как лучше работать с списком QTcpSocket в классе модели? Отправлено: mutineer от Март 27, 2012, 00:10 а чем тебя этот сокет не устраивает?
Код: QTcpSocket* clientSocket = (QTcpSocket*)sender(); Почему тут client сам не может из сокета дескриптор получить, зачем его снаружи задавать? Код: CClientRow *client = new CClientRow(clientSocket); Название: Re: Model/View: как лучше работать с списком QTcpSocket в классе модели? Отправлено: asterix39rus от Март 27, 2012, 00:20 а чем тебя этот сокет не устраивает? Да в принципе устраивает, просто не хочется дёргать модель и перебирать в ней список объектов.Хочется работать в sReadClient c QTcpSocket*, который создал на этапе соединения. Получается, что помимо набора указателей на сокеты, придётся хранить ещё один набор в CServer, но опять придётся его перебирать, чтобы получить нужный указатель на клиент по descriptor.... Почему тут client сам не может из сокета дескриптор получить, зачем его снаружи задавать? Не идёт, т.к. тут создаётся новый объект, а нужно обращаться к существующему в модели.Код: CClientRow *client = new CClientRow(clientSocket); Название: Re: Model/View: как лучше работать с списком QTcpSocket в классе Отправлено: mutineer от Март 27, 2012, 10:02 Код: QTcpSocket* clientSocket = (QTcpSocket*)sender(); 2) ты получаешь тут тот сокет, который отправил сигнал. А это как раз тот сокет, который создался на этапе соединения. Зачем еще в модель лезть? Цитировать Не идёт, т.к. тут создаётся новый объект, а нужно обращаться к существующему в модели. какой еще новый объект? зачем нужна вот эта строка?Код: client->SetDescription(sockDescroptor); Название: Re: Model/View: как лучше работать с списком QTcpSocket в классе модели? Отправлено: asterix39rus от Март 27, 2012, 10:06 Цитировать 2) ты получаешь тут тот сокет, который отправил сигнал. А это как раз тот сокет, который создался на этапе соединения Да, теперь понял, connect вешаю на конкретный указатель сокета, поэтому можно сразу его менять и не лезть в модель.Цитировать 1) не используй такое приведение, юзай qobject_cast или dynamic_cast Учту. А какие подводные камни я обхожу в этом случае?Название: Re: Model/View: как лучше работать с списком QTcpSocket в классе модели? Отправлено: mutineer от Март 27, 2012, 10:14 Цитировать 1) не используй такое приведение, юзай qobject_cast или dynamic_cast Учту. А какие подводные камни я обхожу в этом случае?Если sender() вернет тебе не QTcpSocket*, а указатель на объект другого типа (а он может), то qobject_cast и dynamic_cast это поймут и вернут 0. А (QTcpSocket*) просто прикастует указатель к нужному типу без оглядки на то, можно ли так делать. И ты будешь работать с непонятной областью памяти как с сокетом Название: Re: Model/View: как лучше работать с списком QTcpSocket в классе модели? Отправлено: asterix39rus от Март 27, 2012, 11:34 Спасибо за помощь, тему можно закрывать
|