gpt4 book ai didi

qt - 为什么 QTcpSocket 不发出信号?

转载 作者:行者123 更新时间:2023-12-04 13:58:38 26 4
gpt4 key购买 nike

我在使用 QTcpSocket 时遇到问题,它没有发出任何信号:/


void NetworkInstance::run()
{
m_pSocket = new QTcpSocket();
connect(m_pSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(socketError()));
connect(m_pSocket, SIGNAL(hostFound()), this, SLOT(socketHostLookupDone()));
connect(m_pSocket, SIGNAL(connected()), this, SLOT(socketConnected()));
connect(m_pSocket, SIGNAL(disconnected()), this, SLOT(socketDisconnected()));

connect(m_pSocket, SIGNAL(readyRead()), this, SLOT(socketReadyRead()));

QSettings s;
s.beginGroup("network");
emit log(QString("Connection to: ").append(s.value("host").toString()).append(":").append(s.value("port").toString()));
m_pSocket->connectToHost(s.value("host").toString(), s.value("port").toInt());
s.endGroup();

exec();
}

这是我的代码,我没有看到任何错误,但没有发出连接信号(hostFound、connected 等)。在服务器上,我可以看到建立了连接并发送了数据,但客户端没有任何 react 。 NetworkInstance 正在扩展 QThread。

最佳答案

根据我之前的评论,继承 QThread 是错误的,您需要做的是创建从 QObject 继承的类,然后将其移动到新的 QThread。

所以你会有一个看起来像这样的类: -

class NetworkInstance : public QObject
{
Q_OBJECT

public:
NetworkInstance();

public slots:
void Run();

void socketConnected();
void socketError();
// etc for other slots...

private:
class QTCPSocket* m_pSocket;
}

创建您的网络实例对象和线程:-
QThread* pThread = new QThread;
NetworkInstance* pNetworkInstance = new NetworkInstance;

创建 QTCPSocket 实例并连接 NetworkInstance 类中的信号/插槽,然后创建 QThread 并将您的类移动到线程: -
pNetworkInstance->moveToThread(pThread);

最后,启动线程运行: -
pThread->start();

关于qt - 为什么 QTcpSocket 不发出信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18211758/

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