не распознает класс потока при объявлении - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь закодировать функцию автосохранения, которая запускает поток, который каждый период времени запускает функцию автосохранения, но при объявлении ее в mainwindow.h выдает ошибку «AutoSaveThread не называет тип, который вы имели в виду« создать поток » "

код, где происходит ошибка

AutoSaveThread as;

класс, который должен называться

`class AutoSaveThread:public QThread{
    Q_OBJECT
public:
    bool active;
protected:
    void run();
private:
    int saveTimer=10;
signals:
    void autoS();
};`

функция автосохранения

void MainWindow::autosave()
{
    int numOfPoints=0;
    QJsonObject imagesJsonObject;
    QJsonArray shapeJsonArray;
    QJsonObject shapeJsonObject;
    QJsonArray coodJsonArray;
    QJsonObject pointJsonObject;
    QJsonObject coorJsonObject;
    QString initialPath = QDir::currentPath() + "/autosave.json";
    QFile jsonFile(initialPath);
    jsonFile.open(QFile::WriteOnly);
    imagesJsonObject.insert("file_Name",map->filename);
    for(int i=0;i<shapes.size();i++)
    {
        numOfPoints=shapes[i].count();
        for(int j=0;j<numOfPoints;j++)
        {
            pointJsonObject.insert("x",shapes[i][j].x());
            pointJsonObject.insert("y",shapes[i][j].y());
            coodJsonArray.append(pointJsonObject);
        }
        coorJsonObject.insert("coordinates",coodJsonArray);
        for(int j=0;j<numOfPoints;j++)
        {
            coodJsonArray.removeFirst();
        }
        shapeJsonObject.insert("annotation",0);//to do assign annotation when annotation linked to shape
        shapeJsonArray.append(shapeJsonObject);
        shapeJsonArray.append(coorJsonObject);
    }
    imagesJsonObject.insert("shapes",shapeJsonArray);


    QJsonDocument jsonDoc(imagesJsonObject);
    jsonFile.write(jsonDoc.toJson());
    jsonFile.close();
}

функция запуска

void AutoSaveThread::run()
{
    while(true)
    {
        std::this_thread::sleep_for(std::chrono::seconds(saveTimer));
        //h.autosave(); ("h" is mainwindow however not only does it cause the diamond effect (because passing autosave to mainwindow but also passing mainwindow to autosave)(also you cant pass parent to child)
        qDebug()<<"autosaved";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...