我在MyThread.cpp和.h中定义了一个QThread。那里我有一个私有(private)的QTcpSocket。

class MyThread: public QThread {

    Q_OBJECT

public:
    MyThread();
    virtual ~MyThread();

public slots:
    void reconnect();
signals:

protected:
    void run(void);

private:
    QTcpSocket *socket;
};

void MyThread::run(void) {
    bool connected = false;

    connected = prepareSocket(QString::fromLatin1((Global::directionIPSerialServer).toLocal8Bit().data()), 8008, socket);
}

另一方面,我在Functions.cpp和.h中定义了一组函数,这些函数未定义为Functions类,而是命名空间。
bool Functions::prepareSocket(QString address, int port, QTcpSocket *socket) {
    socket->connectToHost(address, port);
    if(!socket->waitForConnected(Global::maxTimueToConnectByTCP)){
        qDebug()<<"Error: "<<socket->errorString();
        return false;
    }
    return true;
}

然后,如果我错了,请更正我,当我在Function中调用一个函数以将MyThread的QTcpSocket连接到主机时,我假设我在同一个线程中,因为我是从我已经调用过的线程中调用该函数的创造了一个不同的。

尽管如此,在套接字-> connectToHost上,我得到的是 QObject:无法为处于不同线程中的父级创建子级。 两次。

这是为什么?怎么了?

最佳答案

试试:QObject::moveToThread。这应该可以解决问题。

关于c++ - 无法为处于不同线程中的父级创建子级,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10430420/

10-11 19:18