Как мне правильно сделать, чтобы заработал поток?
Выдает ошибку.
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 новичок.