gpt4 book ai didi

c++ - 我怎么知道哪个 QTcpSocket 发出了 readyRead() 信号?

转载 作者:搜寻专家 更新时间:2023-10-31 01:14:24 26 4
gpt4 key购买 nike

我创建了一个 hello-world 程序来帮助我理解 QTcpServer 和 QTcpSocket 的工作原理。在其中,QTcpServer 接受新连接并将它们的 readyRead() 信号连接到 MainWindow::onNewData() 槽,在槽中它们的新数据被附加到纯文本控件。

问题是可以同时打开多个套接字。所以当我收到 readyRead() 信号并且我想用 readAll() 读取数据时,我怎么知道哪个套接字发出了它?

这是代码的相关部分。我在这里根本没有存储 QTcpSocket 指针,但即使我存储了,我仍然不知道它们中的哪一个发出了信号。

    // constructor
server = new QTcpServer(this);
connect(server, SIGNAL(newConnection()), this, SLOT(onNewConnection()));
server->listen(QHostAddress::LocalHost, 3333);

void MainWindow::onNewConnection()
{
QTcpSocket* socket = server->nextPendingConnection();
connect(socket, SIGNAL(disconnected()), socket, SLOT(deleteLater()));
connect(socket, SIGNAL(readyRead()), this, SLOT(onNewData()));
}

void MainWindow::onNewData()
{
ui->plainTextEdit->appendPlainText(WHICH_SOCKET_EMITTED_IT()->readAll());
}

最佳答案

最好的方法(在我看来)是实现你自己的 Client 类,它将封装 QTcpSocket

class Client : public QObject
{
Q_OBJECT
public:
Client(QTcpSocket *socket)
: m_socket(socket)
{
connect(socket, SIGNAL(readyRead()), this, SLOT(onNewData()));
}

private slots:
void onNewData();

private:
QTcpSocket *m_socket;
};

最简单的方法:在槽函数中使用QObject::sender()

关于c++ - 我怎么知道哪个 QTcpSocket 发出了 readyRead() 信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11386014/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com