Как мне правильно сделать, чтобы заработал поток?

Выдает ошибку.

QObject: Cannot create children for a parent that is in a different thread.
(Parent is Updater(0x55d25094b5a0), parent's thread is QThread(0x55d24ff199b0), current thread is Updater(0x55d25094b5a0)

Создаю поток.


    updater = new Updater(0);
    updater->start();

вот хиадер

#ifndef UPDATER_H
#define UPDATER_H
#include <QtWidgets>
#include <QTcpSocket>
#include <QJsonObject>
#include <QJsonDocument>

class Updater : public QThread
{
    Q_OBJECT
public:
    Updater(QWidget *parent);
    bool isUpdated;
private:
    QTcpSocket *sock;
    void run();
public slots:
    void connected_to_server();
};

#endif // UPDATER_H

Вот класс.

#include "updater.h"
#include "version.h"


Updater::Updater(QWidget *parent) : QThread(parent)
{

}

void Updater::run()
{
    sock = new QTcpSocket(this);
    sock->connectToHost("192.168.1.2", 9336);


    connect(sock,SIGNAL(connected()), this, SLOT(connected_to_server()));

}

void Updater::connected_to_server()
{
    QJsonObject data;
    data["command"] = "update";
    data["os"] = "windows";
    data["version"] = PLAYER_VERSION;

    QJsonDocument doc(data);
    QByteArray byte_data = doc.toJson();

    qDebug() << byte_data;
    sock->write(byte_data,byte_data.length());

    char qdata[16386];
    sock->read(qdata, 16386);

    QJsonDocument jsonDoc = QJsonDocument::fromJson(qdata,nullptr);

    QJsonObject object = jsonDoc.object();

    if(object["done"].toBool() == true) {
        return;
    }

    QString file_path = object["file"].toString();
    unsigned long size = object["size"].toInt();

    QFile file(file_path);

    if(file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {

        while ( size > 0 ) {
            int ret = sock->read(qdata, 16385);
            file.write(qdata, ret);
            size -= ret;
        }
        file.close();
    }

    sock->close();
}

И вообще, правильно ли я делаю. правильно ли получаю данные от сервера? а то я в qt новичок.


Ответы (0 шт):