r_levkovych

slots_passing

Mar 16th, 2020
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.85 KB | None | 0 0
  1. #include <QObject>
  2. #include <QTcpServer>
  3. #include <QTcpSocket>
  4.  
  5. class SomeClass : public QObject {
  6.   Q_OBJECT
  7.  
  8.     using slotMethod_t = void (SomeClass::*)();
  9. public:
  10.     explicit SomeClass(QObject* parent = nullptr) : QObject(parent), server(new TcpServer(this)) {
  11.        connect(server, &QTcpServer::newConnection, this, replaceConnection(server, socket, &SomeClass::someSlot));
  12.     }
  13.  
  14. public slots:
  15.      void someSlot() {
  16.       // read data from socket.
  17.      }
  18.  
  19. std::function<void()> replaceConnection(
  20.     QTcpServer* server_, QTcpSocket* socket_, slotMethod_t slot) {
  21.     if (socket) {
  22.         socket_->close();
  23.         delete socket_;
  24.     }
  25.     return [&] {
  26.         socket_ = server_->nextPendingConnection();
  27.         connect(socket_, &QAbstractSocket::readyRead, this, slot);
  28.     };
  29. }
  30.  
  31.     QTcpServer* server;
  32.     QTcpSocket* socket
  33. };
Advertisement
Add Comment
Please, Sign In to add comment