Как исправить QObject: Cannot create children for a parent that is in a different thread

208
27 сентября 2021, 10:50

В библиотеке есть функции:

int read(void* h, unsigned int b, unsigned int r, unsigned int* v)
{
    QString q = QString("read %1 %2 %3").arg(b).arg(r).arg(*v);
    QString r = query(q);
    qDebug() << "  * (hex)" << hex << r << dec;
    *value = r.toUInt();
    return 0;
}
int write(void* h, unsigned int b, unsigned int r, unsigned int v)
{
    QString q = QString("write %1 %2 %3").arg(b).arg(r).arg(v, 8, 16, QChar('0'));
    QString r = query(q);
    qDebug() << "  * (hex)" << hex << r << dec;
    return 0;
}
QString query(QString _q)
{
    qDebug() << "[query]";
    QString host = "127.0.0.1";
    ushort port = 7777;
    QString reply;
    if (!_connectToHost(host, port))
    {
        reply =  "[ERROR] Connecting to host failed";
    }
    else
    {
        if (QAbstractSocket::ConnectedState == sock.state())
        {
            QByteArray ar = _q.toLatin1();
            sock.write(ar);
            if (sock.waitForBytesWritten())
            {
                qDebug() << "Data were written";
            }
            else
            {
                reply = "[ERROR] Writing data failed";
            }
            if (sock.waitForReadyRead(1000))
            {
                reply = sock.read(1024);
            }
        }
    }
    sock.disconnectFromHost();
    return reply;
}
bool _connectToHost(const QString& _host, const ushort _port)
{
    qDebug() << "[_connectToHost]";
    qDebug() << "  * connecting...";
    sock.connectToHost(_host, _port);
    qDebug() << "  * Waiting for connection...";
    return sock.waitForConnected();
}

После вызова query получаю сообщение:

* connecting...
Cannot create children for a parent that is in a different thread.
(Parent is QTcpSocket(0x55555576e3e0), parent's thread is QThread(0x5555557872b0), current thread is QThread(0x7fffffffe450)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QTcpSocket(0x55555576e3e0), parent's thread is QThread(0x5555557872b0), current thread is QThread(0x7fffffffe450)

Из программы вызываются функции read и write.

Сервер получает строку и даже отвечает, но хотелось бы устранить сообщения. Объясните, пожалуйста, как лечить. Заранее благодарен.

READ ALSO
перекомпилируйте с параметром -fPIC

перекомпилируйте с параметром -fPIC

Работаю над проектом(состоящий из нескольких подпроектов) Cmake с использование библиотеки wxWidgets, некоторые проекты не могут собраться по причине:

62
При комплиляции программа выдает a=0.00000,b=-9334555

При комплиляции программа выдает a=0.00000,b=-9334555

уважаемые форумчанеПишу программу по заданию(Даны 2 числа

122
Как рисовать на представлении? Qt

Как рисовать на представлении? Qt

Есть модель, содержащая строки, и списочное представление

68
Не видит библиотеку при сборке приложения под android Qt

Не видит библиотеку при сборке приложения под android Qt

В общем, пишу небольшое приложение на С++ в Qt, которое сможет отрисовывать графы, использую стороннюю библиотеку Graphviz в QtПри дебаге приложения...

100