插槽和信号之间的Qt连接功能不适用于线程运行功能

时间:2013-06-11 10:21:03

标签: connection signals-slots qthread

我通过qt wroute服务器程序和客户端程序。 客户端程序通过tcp协议创建与本地主机端口60600的连接,并且服务器程序监听该端口。 在客户端创建新连接后,服务器接受连接并将数据包发送到客户端。 在正常状态下,我在客户端和服务器程序的主要功能中创建TCPClient类对象和TCPServer类对象,并且它可以正常工作。

但我需要在线程中创建对象并在main函数中创建和启动线程。 当我将创建客户端或服务器对象的代码移动到Qthread的run()函数时,它会运行,但服务器和客户端无法正常工作。

服务器和客户端类的构造函数中的

connect()函数返回true但连接不起作用且插槽函数不调用。

可以帮助我吗?

服务器代码在这里:

main.cpp中:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    ......

    PgThread* MyThread = new PgThread( d );
    MyThread->start();

    ......

    return app.exec();
}

PgThread.cpp

PgThread::PgThread( int packetsizein )
{
    packetsize = packetsizein;
    //connect( this, SIGNAL(finished()), this, SLOT(finishedReq() ));

}
PgThread::~PgThread

()
{
    delete server;
}

void PgThread::run()
{
    server = new tcpserver(packetsize);

}

tcpserver.cpp:

tcpserver::tcpserver(int packsize)
{
    packetSize = packsize;
    server = new QTcpServer(this);
    server -> listen( QHostAddress::Any,60600 );
    connect( server,SIGNAL(newConnection()),this,SLOT(newConnectionRequest()) );
}

void tcpserver::newConnectionRequest()//does not call when tcpserver object create in run comnmand of pgthread
{
    i=i+1;
    QTcpSocket *clientConnection = server->nextPendingConnection();
    connect(clientConnection, SIGNAL(disconnected()), clientConnection, SLOT(deleteLater()));
    QByteArray block;
    char c;
    c=(char)i;
    block.append(c);
    for (int k=1;k<packetSize;k++)
        block.append('A');
    clientConnection->write(block);
    clientConnection->flush();
    qint64 current = QDateTime::currentMSecsSinceEpoch();
    if(forDebug)
        cout << "start time: " <<current<<endl;
    else
        cout << i << "\n" << current << endl;
    clientConnection->disconnectFromHost();
}

1 个答案:

答案 0 :(得分:0)

我发现了问题: 我必须在run函数结束时添加exec()函数!