Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ connect(在QT项目中)没有';行不通_C++_Qt_Qthread_Qtcpsocket_Qtcpserver - Fatal编程技术网

C++ connect(在QT项目中)没有';行不通

C++ connect(在QT项目中)没有';行不通,c++,qt,qthread,qtcpsocket,qtcpserver,C++,Qt,Qthread,Qtcpsocket,Qtcpserver,我开始使用QT库创建我的第一个多线程应用程序 按照关于QTcpServer和QTcpSocket的qt指南,我编写了一个服务器应用程序,用于创建与此构造函数的连接: Connection::Connection(QObject *parent) : QTcpServer(parent) { server = new QTcpServer(); QString ipAddress; if (ipAddress.isEmpty()) ipAddress =

我开始使用QT库创建我的第一个多线程应用程序

按照关于QTcpServer和QTcpSocket的qt指南,我编写了一个服务器应用程序,用于创建与此构造函数的连接:

Connection::Connection(QObject *parent) : QTcpServer(parent)
{
    server = new QTcpServer();
    QString ipAddress;

    if (ipAddress.isEmpty())
        ipAddress = QHostAddress(QHostAddress::LocalHost).toString();

    if (!server->listen(QHostAddress(ipAddress),41500))
    {
        qDebug() << "Enable to start server";
        server->close();
        return;
    }

    connect(server,SIGNAL(newConnection()),this,SLOT(incomingConnection()));
}
然后服务器无法接收客户端的数据

有人知道吗

提前谢谢 达涅利

应该是:

socket = server->nextPendingConnection();
因为您使用的是
服务器
成员,而不是
作为活动的
qtcserver
,所以类
连接
甚至不应该从
qtcserver
继承,而应该只从
QObject
继承


此外,您还误用了
QThread
。如果
Db
正在使用QtSql模块,您应该阅读,而且可能是这样。

我不确定,但我认为
socket
属于第一个线程,您正在通过新创建的线程传递它,并且在内部执行
tcpSocket=new qtcsocket()似乎无法在当前线程之外重新分配数据。您在哪里学习C++的?你知道关于堆和堆栈的知识吗?你在泄漏内存。另外,您正在手动调用析构函数,而不是使用delete。另一件事是,即使连接到readyRead可以正常工作,您的插槽也会在不同的线程中被调用,而这正是您所期望的。代码中有很多东西需要修复。您还可以提供MyThreadClass声明吗?在您的位置,我将从学习一些C++基础知识(如内存管理)开始。你做了很多错误的事情,我甚至不会去麻烦你的连接问题,直到你得到一些C++基础知识<代码> TCPStute=新QtpCSOCKET()。代码>然后
tcpSocket=socket。为什么?你为什么要那样做?你是对的。该代码是许多更改的结果,因此有很多错误…非常抱歉。。。但是,如果取消“tcpSocket=new qtcsocket();”指令,问题不会改变……为什么在继承它时要创建
qtcserver
?太尴尬了!!我没有提到其他问题,因为有人已经告诉过你。。。“许多更改”并不是在代码中留下这种垃圾的借口!这个错误来自于C++知识的贫乏。这就是为什么我一开始没有指出的原因。我知道,因为我只学习C++。也许如果我非常了解你C++,那么我就不需要在这里问任何东西了。此外,如果你不想,没有人强迫你回答#亚历克西斯:非常感谢。我知道有很多错误,但是,按照你的建议,现在项目进展得相当顺利。实际上,服务器和客户端按照我的要求进行通信。
MyThreadClass::MyThreadClass(QTcpSocket *socket, QTcpServer *parent) : QThread(parent)
{
    tcpSocket = new QTcpSocket();
    database = new Db();
    blockSize = 0;

    tcpSocket = socket;

    qDebug() << "creating new thread";
}


MyThreadClass::~MyThreadClass()
{
    database->~Db();
}


void MyThreadClass::run()
{
    qDebug() << "Thread created";
    connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(dataAvailable()));
    exec();
}


void MyThreadClass::dataAvailable()
{
    qDebug() << "data available";
    QDataStream in(tcpSocket);
    in.setVersion(QDataStream::Qt_4_0);

    if (blockSize == 0) {
        if (tcpSocket->bytesAvailable() < (int)sizeof(qint16))
            return;
        in >> blockSize;
    }

    if (tcpSocket->bytesAvailable() < blockSize)
        return;

    QString string;
    in >> string;

    //[...]

 }
QObject::connect: Cannot connect (null)::readyRead() to QThread::dataAvailable()
socket = this->nextPendingConnection();
socket = server->nextPendingConnection();