#ifndef GOLDBACHMODEL_H #define GOLDBACHMODEL_H #include #include class GoldbachWorker; class GoldbachModel : public QAbstractListModel { Q_OBJECT Q_DISABLE_COPY(GoldbachModel) protected: //GoldbachWorker* worker = nullptr; QVector workers; QVector progressPercents; int overallProgressPercent = 0; int finishedWorkerCount = 0; QVector< QVector > results; int fetchedRowCount = 0; public: explicit GoldbachModel(QObject *parent = nullptr); virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override; virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; const QString& findValue(int index) const; int countResults() const; void calculate(long long number); void stop(); protected: bool canFetchMore(const QModelIndex &parent) const override; void fetchMore(const QModelIndex &parent) override; signals: void calculationDone(long long sumCount); void progressUpdated(int percent) const; private slots: void workerDone(long long sumCount); void updateProgress(int workerId, int percent); }; #endif // GOLDBACHMODEL_H