Я разрабатываю приложение, которое имело смысл, что я обернул свои классы вокруг реализованного QTcpSocket (так как это протокол TCP, и я должен иметь возможность использовать необработанный сокет и добавленные функции как можно проще).
Итак, для простоты мой код структурирован так:
class MyTCPSocket : public QTcpSocket
{
Q_OBJECT
// ....
}
class MyTCPServer : public QTcpServer
{
Q_OBJECT
// ....
}
А с QTcpServer функция nextPendingConnection () по умолчанию возвращает экземпляр QTcpSocket, который я не могу привести к MyTCPSocket (насколько я знаю, QTcpSocket не имеет структуры копирования).
Какой мой лучший вариант для передачи этого? Я думал, что мог бы создать новый MyTCPSocket и просто установить дескриптор сокета на тот, который возвращен nextPendingConnection () из MyTCPServer, но я не был уверен, как это будет работать, когда старый сокет будет удален.
Есть ли лучший способ справиться с этой ситуацией?
Именно это: переопределить incomingConnection
но не вызывайте базовый класс, вместо этого создайте экземпляр вашего QTcpSocket
подкласс и использование setSocketDescriptor
в теме. Если вы хотите сохранить QTcpSocket «поведение сигнала», также вызовите addPendingConnection
и излучать newConnection
,
Тогда просто опусти сокет nextPendingConnection
к вашему подклассу QTcpSocket.
Других решений пока нет …